JSDOMConvertStrings.h [plain text]
#pragma once
#include "IDLTypes.h"
#include "JSDOMConvertBase.h"
#include "StringAdaptors.h"
namespace WebCore {
WEBCORE_EXPORT String identifierToByteString(JSC::JSGlobalObject&, const JSC::Identifier&);
WEBCORE_EXPORT String valueToByteString(JSC::JSGlobalObject&, JSC::JSValue);
WEBCORE_EXPORT String identifierToUSVString(JSC::JSGlobalObject&, const JSC::Identifier&);
WEBCORE_EXPORT String valueToUSVString(JSC::JSGlobalObject&, JSC::JSValue);
inline String propertyNameToString(JSC::PropertyName propertyName)
{
ASSERT(!propertyName.isSymbol());
return propertyName.uid() ? propertyName.uid() : propertyName.publicName();
}
inline AtomString propertyNameToAtomString(JSC::PropertyName propertyName)
{
return AtomString(propertyName.uid() ? propertyName.uid() : propertyName.publicName());
}
template<> struct Converter<IDLDOMString> : DefaultConverter<IDLDOMString> {
static String convert(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value)
{
return value.toWTFString(&lexicalGlobalObject);
}
};
template<> struct JSConverter<IDLDOMString> {
static constexpr bool needsState = true;
static constexpr bool needsGlobalObject = false;
static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const String& value)
{
return JSC::jsStringWithCache(&lexicalGlobalObject, value);
}
static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const UncachedString& value)
{
return JSC::jsString(JSC::getVM(&lexicalGlobalObject), value.string);
}
static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const OwnedString& value)
{
return JSC::jsOwnedString(JSC::getVM(&lexicalGlobalObject), value.string);
}
};
template<> struct Converter<IDLByteString> : DefaultConverter<IDLByteString> {
static String convert(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value)
{
return valueToByteString(lexicalGlobalObject, value);
}
};
template<> struct JSConverter<IDLByteString> {
static constexpr bool needsState = true;
static constexpr bool needsGlobalObject = false;
static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const String& value)
{
return JSC::jsStringWithCache(&lexicalGlobalObject, value);
}
static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const UncachedString& value)
{
return JSC::jsString(JSC::getVM(&lexicalGlobalObject), value.string);
}
static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const OwnedString& value)
{
return JSC::jsOwnedString(JSC::getVM(&lexicalGlobalObject), value.string);
}
};
template<> struct Converter<IDLUSVString> : DefaultConverter<IDLUSVString> {
static String convert(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value)
{
return valueToUSVString(lexicalGlobalObject, value);
}
};
template<> struct JSConverter<IDLUSVString> {
static constexpr bool needsState = true;
static constexpr bool needsGlobalObject = false;
static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const String& value)
{
return JSC::jsStringWithCache(&lexicalGlobalObject, value);
}
static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const UncachedString& value)
{
return JSC::jsString(JSC::getVM(&lexicalGlobalObject), value.string);
}
static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const OwnedString& value)
{
return JSC::jsOwnedString(JSC::getVM(&lexicalGlobalObject), value.string);
}
};
template<typename T> struct Converter<IDLTreatNullAsEmptyAdaptor<T>> : DefaultConverter<IDLTreatNullAsEmptyAdaptor<T>> {
static String convert(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value)
{
if (value.isNull())
return emptyString();
return Converter<T>::convert(lexicalGlobalObject, value);
}
};
template<typename T> struct JSConverter<IDLTreatNullAsEmptyAdaptor<T>> {
static constexpr bool needsState = true;
static constexpr bool needsGlobalObject = false;
static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const String& value)
{
return JSConverter<T>::convert(lexicalGlobalObject, value);
}
};
template<typename T> struct Converter<IDLAtomStringAdaptor<T>> : DefaultConverter<IDLAtomStringAdaptor<T>> {
static AtomString convert(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value)
{
static_assert(std::is_same<T, IDLDOMString>::value, "This adaptor is only supported for IDLDOMString at the moment.");
return value.toString(&lexicalGlobalObject)->toAtomString(&lexicalGlobalObject);
}
};
template<typename T> struct JSConverter<IDLAtomStringAdaptor<T>> {
static constexpr bool needsState = true;
static constexpr bool needsGlobalObject = false;
static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const AtomString& value)
{
static_assert(std::is_same<T, IDLDOMString>::value, "This adaptor is only supported for IDLDOMString at the moment.");
return JSConverter<T>::convert(lexicalGlobalObject, value);
}
};
template<typename T> struct Converter<IDLRequiresExistingAtomStringAdaptor<T>> : DefaultConverter<IDLRequiresExistingAtomStringAdaptor<T>> {
static AtomString convert(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value)
{
static_assert(std::is_same<T, IDLDOMString>::value, "This adaptor is only supported for IDLDOMString at the moment.");
return AtomString(value.toString(&lexicalGlobalObject)->toExistingAtomString(&lexicalGlobalObject));
}
};
template<typename T> struct JSConverter<IDLRequiresExistingAtomStringAdaptor<T>> {
static constexpr bool needsState = true;
static constexpr bool needsGlobalObject = false;
static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const AtomString& value)
{
static_assert(std::is_same<T, IDLDOMString>::value, "This adaptor is only supported for IDLDOMString at the moment.");
return JSConverter<T>::convert(lexicalGlobalObject, value);
}
};
}