[X2Go-Commits] [pale-moon] 107/294: Actually change the key type of a record, and its corresponding conversion behavior, depending on what the IDL says

git-admin at x2go.org git-admin at x2go.org
Sat Apr 27 08:57:56 CEST 2019


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch upstream/28.5.0
in repository pale-moon.

commit e7c9fa3e1505aeb90385e0a4e90fe5e0b137d4ab
Author: JustOff <Off.Just.Off at gmail.com>
Date:   Wed Mar 13 20:17:36 2019 +0200

    Actually change the key type of a record, and its corresponding conversion behavior, depending on what the IDL says
---
 dom/bindings/Codegen.py       | 48 +++++++++++++++++++++++++++++++++++--------
 dom/bindings/Record.h         |  2 +-
 dom/fetch/InternalHeaders.cpp |  2 +-
 3 files changed, 41 insertions(+), 11 deletions(-)

diff --git a/dom/bindings/Codegen.py b/dom/bindings/Codegen.py
index 915d7d4..4e6248e 100644
--- a/dom/bindings/Codegen.py
+++ b/dom/bindings/Codegen.py
@@ -4372,11 +4372,15 @@ def handleDefaultStringValue(defaultValue, method):
             }
 
 
-def recordKeyDeclType(recordType):
+def recordKeyType(recordType):
     assert recordType.keyType.isString()
     if recordType.keyType.isByteString():
-        return CGGeneric("nsCString")
-    return CGGeneric("nsString")
+        return "nsCString"
+    return "nsString"
+
+
+def recordKeyDeclType(recordType):
+    return CGGeneric(recordKeyType(recordType))
 
 
 # If this function is modified, modify CGNativeMember.getArg and
@@ -4786,6 +4790,15 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
             "passedToJSImpl": "${passedToJSImpl}"
         })
 
+        keyType = recordKeyType(recordType)
+        if recordType.keyType.isDOMString():
+            keyConversionFunction = "ConvertJSValueToString"
+        elif recordType.keyType.isUSVString():
+            keyConversionFunction = "ConvertJSValueToUSVString"
+        else:
+            assert recordType.keyType.isByteString()
+            keyConversionFunction = "ConvertJSValueToByteString"
+
         templateBody = fill(
             """
             auto& recordEntries = ${recordRef}.Entries();
@@ -4805,6 +4818,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
             JS::Rooted<JS::Value> propNameValue(cx);
             JS::Rooted<JS::Value> temp(cx);
             JS::Rooted<jsid> curId(cx);
+            JS::Rooted<JS::Value> idVal(cx);
             for (size_t i = 0; i < ids.length(); ++i) {
               curId = ids[i];
 
@@ -4821,12 +4835,11 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
                 continue;
               }
 
-              binding_detail::FakeString propName;
-              bool isSymbol;
-              if (!ConvertIdToString(cx, curId, propName, isSymbol)) {
+              idVal = js::IdToValue(curId);
+              ${keyType} propName;
+              if (!${keyConversionFunction}(cx, idVal, propName)) {
                 $*{exceptionCode}
               }
-              MOZ_ASSERT(!isSymbol, "We said, no symbols!");
 
               if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) {
                 $*{exceptionCode}
@@ -4842,6 +4855,8 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
             """,
             exceptionCode=exceptionCode,
             recordRef=recordRef,
+            keyType=keyType,
+            keyConversionFunction=keyConversionFunction,
             typeName=typeName,
             valueType=valueInfo.declType.define(),
             valueConversion=valueConversion)
@@ -6491,6 +6506,18 @@ def getWrapTemplateForType(type, descriptorProvider, result, successCode,
                 'typedArraysAreStructs': typedArraysAreStructs
             })
         recordWrapLevel -= 1
+        if type.keyType.isByteString():
+            # There is no length-taking JS_DefineProperty.  So to keep
+            # things sane with embedded nulls, we want to byte-inflate
+            # to an nsAString.  The only byte-inflation function we
+            # have around is AppendASCIItoUTF16, which luckily doesn't
+            # assert anything about the input being ASCII.
+            expandedKeyDecl = "NS_ConvertASCIItoUTF16 expandedKey(entry.mKey);\n"
+            keyName = "expandedKey"
+        else:
+            expandedKeyDecl = ""
+            keyName = "entry.mKey"
+
         code = fill(
             """
 
@@ -6508,9 +6535,10 @@ def getWrapTemplateForType(type, descriptorProvider, result, successCode,
                 do {
                   $*{innerTemplate}
                 } while (0);
+                $*{expandedKeyDecl}
                 if (!JS_DefineUCProperty(cx, returnObj,
-                                         entry.mKey.BeginReading(),
-                                         entry.mKey.Length(), tmp,
+                                         ${keyName}.BeginReading(),
+                                         ${keyName}.Length(), tmp,
                                          JSPROP_ENUMERATE)) {
                   $*{exceptionCode}
                 }
@@ -6522,6 +6550,8 @@ def getWrapTemplateForType(type, descriptorProvider, result, successCode,
             exceptionCode=exceptionCode,
             valueName=valueName,
             innerTemplate=innerTemplate,
+            expandedKeyDecl=expandedKeyDecl,
+            keyName=keyName,
             set=setObject("*returnObj"))
 
         return (code, False)
diff --git a/dom/bindings/Record.h b/dom/bindings/Record.h
index 2fe18be..b7f7b01 100644
--- a/dom/bindings/Record.h
+++ b/dom/bindings/Record.h
@@ -47,7 +47,7 @@ template<typename KeyType, typename ValueType>
 class Record
 {
 public:
-  typedef typename binding_detail::RecordEntry<nsString, ValueType> EntryType;
+  typedef typename binding_detail::RecordEntry<KeyType, ValueType> EntryType;
   typedef Record<KeyType, ValueType> SelfType;
 
   Record()
diff --git a/dom/fetch/InternalHeaders.cpp b/dom/fetch/InternalHeaders.cpp
index 7bf5703..f66221d 100644
--- a/dom/fetch/InternalHeaders.cpp
+++ b/dom/fetch/InternalHeaders.cpp
@@ -317,7 +317,7 @@ void
 InternalHeaders::Fill(const Record<nsCString, nsCString>& aInit, ErrorResult& aRv)
 {
   for (auto& entry : aInit.Entries()) {
-    Append(NS_ConvertUTF16toUTF8(entry.mKey), entry.mValue, aRv);
+    Append(entry.mKey, entry.mValue, aRv);
     if (aRv.Failed()) {
       return;
     }

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/pale-moon.git


More information about the x2go-commits mailing list