Add ConvertJSValueTo*String functions that just take a value and hand out a string, without extra complications

This commit is contained in:
JustOff 2019-03-13 20:07:10 +02:00 • committed by Roy Tam
commit e234612456
3 changed files with 34 additions and 8 deletions

View file

@ -2558,7 +2558,7 @@ NonVoidByteStringToJsval(JSContext *cx, const nsACString &str,
template<typename T> static void template<typename T> static void
NormalizeUSVStringInternal(JSContext* aCx, T& aString) NormalizeUSVStringInternal(T& aString)
{ {
char16_t* start = aString.BeginWriting(); char16_t* start = aString.BeginWriting();
// Must use const here because we can't pass char** to UTF16CharEnumerator as // Must use const here because we can't pass char** to UTF16CharEnumerator as
@ -2575,15 +2575,15 @@ NormalizeUSVStringInternal(JSContext* aCx, T& aString)
} }
void void
NormalizeUSVString(JSContext* aCx, nsAString& aString) NormalizeUSVString(nsAString& aString)
{ {
NormalizeUSVStringInternal(aCx, aString); NormalizeUSVStringInternal(aString);
} }
void void
NormalizeUSVString(JSContext* aCx, binding_detail::FakeString& aString) NormalizeUSVString(binding_detail::FakeString& aString)
{ {
NormalizeUSVStringInternal(aCx, aString); NormalizeUSVStringInternal(aString);
} }
bool bool

View file

@ -2127,11 +2127,30 @@ ConvertJSValueToString(JSContext* cx, JS::Handle<JS::Value> v,
return AssignJSString(cx, result, s); return AssignJSString(cx, result, s);
} }
void template<typename T>
NormalizeUSVString(JSContext* aCx, nsAString& aString); static inline bool
ConvertJSValueToString(JSContext* cx, JS::Handle<JS::Value> v, T& result)
{
return ConvertJSValueToString(cx, v, eStringify, eStringify, result);
}
void void
NormalizeUSVString(JSContext* aCx, binding_detail::FakeString& aString); NormalizeUSVString(nsAString& aString);
void
NormalizeUSVString(binding_detail::FakeString& aString);
template<typename T>
static inline bool
ConvertJSValueToUSVString(JSContext* cx, JS::Handle<JS::Value> v, T& result)
{
if (!ConvertJSValueToString(cx, v, eStringify, eStringify, result)) {
return false;
}
NormalizeUSVString(result);
return true;
}
template<typename T> template<typename T>
inline bool inline bool
@ -2158,6 +2177,13 @@ bool
ConvertJSValueToByteString(JSContext* cx, JS::Handle<JS::Value> v, ConvertJSValueToByteString(JSContext* cx, JS::Handle<JS::Value> v,
bool nullable, nsACString& result); bool nullable, nsACString& result);
inline bool
ConvertJSValueToByteString(JSContext* cx, JS::Handle<JS::Value> v,
nsACString& result)
{
return ConvertJSValueToByteString(cx, v, false, result);
}
template<typename T> template<typename T>
void DoTraceSequence(JSTracer* trc, FallibleTArray<T>& seq); void DoTraceSequence(JSTracer* trc, FallibleTArray<T>& seq);
template<typename T> template<typename T>

View file

@ -5560,7 +5560,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
def getConversionCode(varName): def getConversionCode(varName):
normalizeCode = "" normalizeCode = ""
if type.isUSVString(): if type.isUSVString():
normalizeCode = "NormalizeUSVString(cx, %s);\n" % varName normalizeCode = "NormalizeUSVString(%s);\n" % varName
conversionCode = fill(""" conversionCode = fill("""
if (!ConvertJSValueToString(cx, $${val}, ${nullBehavior}, ${undefinedBehavior}, ${varName})) { if (!ConvertJSValueToString(cx, $${val}, ${nullBehavior}, ${undefinedBehavior}, ${varName})) {