Browse Source

backports

Frank-Rainer Grahl 6 months ago
parent
commit
eb9edc032f
86 changed files with 9902 additions and 17867 deletions
  1. 7 4
      frg/work-js/mozilla-release/patches/1033916-1-63a1.patch
  2. 0 0
      frg/work-js/mozilla-release/patches/1330661-1-64a1.patch
  3. 0 0
      frg/work-js/mozilla-release/patches/1330661-2-64a1.patch
  4. 7 7
      frg/work-js/mozilla-release/patches/1330661-3-64a1.patch
  5. 26 26
      frg/work-js/mozilla-release/patches/1330661-4-64a1.patch
  6. 2 2
      frg/work-js/mozilla-release/patches/1330661-5-64a1.patch
  7. 0 0
      frg/work-js/mozilla-release/patches/1440468-64a1.patch
  8. 0 0
      frg/work-js/mozilla-release/patches/1467907-64a1.patch
  9. 16 16
      frg/work-js/mozilla-release/patches/1482153-64a1.patch
  10. 0 0
      frg/work-js/mozilla-release/patches/1483323-1-64a1.patch
  11. 0 0
      frg/work-js/mozilla-release/patches/1483323-2-64a1.patch
  12. 0 0
      frg/work-js/mozilla-release/patches/1483323-3-64a1.patch
  13. 0 0
      frg/work-js/mozilla-release/patches/1483323-4-64a1.patch
  14. 0 0
      frg/work-js/mozilla-release/patches/1483323-5-64a1.patch
  15. 0 0
      frg/work-js/mozilla-release/patches/1483962-64a1.patch
  16. 131 249
      frg/work-js/mozilla-release/patches/1485066-01-64a1.patch
  17. 9 33
      frg/work-js/mozilla-release/patches/1485066-02-64a1.patch
  18. 44 71
      frg/work-js/mozilla-release/patches/1485066-03-64a1.patch
  19. 0 0
      frg/work-js/mozilla-release/patches/1485066-04-64a1.patch
  20. 0 0
      frg/work-js/mozilla-release/patches/1485066-05-64a1.patch
  21. 8 8
      frg/work-js/mozilla-release/patches/1485066-06-64a1.patch
  22. 0 0
      frg/work-js/mozilla-release/patches/1485066-07-64a1.patch
  23. 46 68
      frg/work-js/mozilla-release/patches/1485066-08-64a1.patch
  24. 6 33
      frg/work-js/mozilla-release/patches/1485066-09-64a1.patch
  25. 6 31
      frg/work-js/mozilla-release/patches/1485066-10-64a1.patch
  26. 36 34
      frg/work-js/mozilla-release/patches/1485066-11-64a1.patch
  27. 7 62
      frg/work-js/mozilla-release/patches/1485066-12-64a1.patch
  28. 5 5
      frg/work-js/mozilla-release/patches/1485066-13-64a1.patch
  29. 0 0
      frg/work-js/mozilla-release/patches/1485066-14-64a1.patch
  30. 9 9
      frg/work-js/mozilla-release/patches/1485452-64a1.patch
  31. 0 0
      frg/work-js/mozilla-release/patches/1485460-64a1.patch
  32. 0 0
      frg/work-js/mozilla-release/patches/1486125-64a1.patch
  33. 0 0
      frg/work-js/mozilla-release/patches/1487327-64a1.patch
  34. 0 0
      frg/work-js/mozilla-release/patches/1487329-1-64a1.patch
  35. 0 0
      frg/work-js/mozilla-release/patches/1487329-2-64a1.patch
  36. 0 0
      frg/work-js/mozilla-release/patches/1488173-64a1.patch
  37. 10 10
      frg/work-js/mozilla-release/patches/1488191-64a1.patch
  38. 0 0
      frg/work-js/mozilla-release/patches/1488192-64a1.patch
  39. 0 0
      frg/work-js/mozilla-release/patches/1488227-64a1.patch
  40. 7 7
      frg/work-js/mozilla-release/patches/1488461-64a1.patch
  41. 0 0
      frg/work-js/mozilla-release/patches/1488553-64a1.patch
  42. 117 229
      frg/work-js/mozilla-release/patches/1488698-7-64a1.patch
  43. 327 467
      frg/work-js/mozilla-release/patches/1488698-7-ORG-64a1.patch
  44. 15 15
      frg/work-js/mozilla-release/patches/1489477-2-64a1.patch
  45. 1 1
      frg/work-js/mozilla-release/patches/1499140-1-64a1.patch
  46. 7 7
      frg/work-js/mozilla-release/patches/1504334-65a1.patch
  47. 26 26
      frg/work-js/mozilla-release/patches/1539780-70a1.patch
  48. 2 2
      frg/work-js/mozilla-release/patches/1577869-70a1.patch
  49. 25 25
      frg/work-js/mozilla-release/patches/1590907-5-72a1.patch
  50. 9 9
      frg/work-js/mozilla-release/patches/722345-1-64a1.patch
  51. 142 128
      frg/work-js/mozilla-release/patches/722345-2-64a1.patch
  52. 103 94
      frg/work-js/mozilla-release/patches/722345-3-64a1.patch
  53. 8 8
      frg/work-js/mozilla-release/patches/NOBUG-removegctel-25317.patch
  54. 2 2
      frg/work-js/mozilla-release/patches/TOP-1636495-1-78a1.patch
  55. 24 24
      frg/work-js/mozilla-release/patches/TOP-NOBUG-REGEXP-03-1537978-68a1-25318.patch
  56. 19 19
      frg/work-js/mozilla-release/patches/TOP-NOBUG-REGEXP-04-1539690-68a1-25318.patch
  57. 5 5
      frg/work-js/mozilla-release/patches/TOP-NOBUG-REGEXP-06-1504947-10-68a1-25318.patch
  58. 16 17
      frg/work-js/mozilla-release/patches/TOP-NOBUG-REGEXP-07-1626713-76a1-25318.patch
  59. 14 16
      frg/work-js/mozilla-release/patches/TOP-NOBUG-REGEXP-37-1642493-79a1-25318.patch
  60. 0 44
      frg/work-js/mozilla-release/patches/mozilla-central-push_434625.patch
  61. 0 33
      frg/work-js/mozilla-release/patches/mozilla-central-push_434823.patch
  62. 0 59
      frg/work-js/mozilla-release/patches/mozilla-central-push_434991.patch
  63. 0 1143
      frg/work-js/mozilla-release/patches/mozilla-central-push_434999.patch
  64. 0 618
      frg/work-js/mozilla-release/patches/mozilla-central-push_435003.patch
  65. 0 1406
      frg/work-js/mozilla-release/patches/mozilla-central-push_435005.patch
  66. 0 526
      frg/work-js/mozilla-release/patches/mozilla-central-push_435007.patch
  67. 0 537
      frg/work-js/mozilla-release/patches/mozilla-central-push_435009.patch
  68. 0 148
      frg/work-js/mozilla-release/patches/mozilla-central-push_435010.patch
  69. 0 334
      frg/work-js/mozilla-release/patches/mozilla-central-push_435107.patch
  70. 0 44
      frg/work-js/mozilla-release/patches/mozilla-central-push_435279.patch
  71. 0 44
      frg/work-js/mozilla-release/patches/mozilla-central-push_435288.patch
  72. 0 166
      frg/work-js/mozilla-release/patches/mozilla-central-push_435297.patch
  73. 0 166
      frg/work-js/mozilla-release/patches/mozilla-central-push_435299.patch
  74. 0 92
      frg/work-js/mozilla-release/patches/mozilla-central-push_439127.patch
  75. 0 92
      frg/work-js/mozilla-release/patches/mozilla-central-push_439456.patch
  76. 0 7429
      frg/work-js/mozilla-release/patches/mozilla-central_434998.patch
  77. 0 406
      frg/work-js/mozilla-release/patches/mozilla-central_435000.patch
  78. 0 334
      frg/work-js/mozilla-release/patches/mozilla-central_435001.patch
  79. 0 757
      frg/work-js/mozilla-release/patches/mozilla-central_435002.patch
  80. 0 548
      frg/work-js/mozilla-release/patches/mozilla-central_435004.patch
  81. 0 444
      frg/work-js/mozilla-release/patches/mozilla-central_435006.patch
  82. 0 547
      frg/work-js/mozilla-release/patches/mozilla-central_435008.patch
  83. 0 115
      frg/work-js/mozilla-release/patches/mozilla-central_435011.patch
  84. 49 63
      frg/work-js/mozilla-release/patches/series
  85. 44 3
      frg/work-js/mozilla-release/patches/series-test
  86. 8565 0
      frg/work-js/mozilla-release/patches/series-test.bak

+ 7 - 4
frg/work-js/mozilla-release/patches/1033916-1-63a1.patch

@@ -2,7 +2,7 @@
 # User Jeff Walden <jwalden@mit.edu>
 # Date 1534776368 25200
 # Node ID 67d5039dcbc2522e187bcf3dbec1c6e92bd32167
-# Parent  d2f9c12b057cf777ea69ab0ac6a855cdae701411
+# Parent  0597eebf1a01f32255eaa47f86246bb52aea6f92
 Bug 1033916 - Move JSAutoByteString out of jsapi.h into js/public/AutoByteString.h, incidentally breaking the jsfriendapi.h -> jsapi.h dependency.  r=jandem
 
 diff --git a/dom/base/ChromeUtils.cpp b/dom/base/ChromeUtils.cpp
@@ -510,7 +510,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 diff --git a/js/src/jsapi.h b/js/src/jsapi.h
 --- a/js/src/jsapi.h
 +++ b/js/src/jsapi.h
-@@ -4542,29 +4542,16 @@ JS_ConcatStrings(JSContext* cx, JS::Hand
+@@ -4519,29 +4519,16 @@ JS_ConcatStrings(JSContext* cx, JS::Hand
   * NB: This function does not store an additional zero byte or char16_t after the
   * transcoded string.
   */
@@ -540,7 +540,7 @@ diff --git a/js/src/jsapi.h b/js/src/jsapi.h
  JS_GetStringEncodingLength(JSContext* cx, JSString* str);
  
  /**
-@@ -4573,85 +4560,16 @@ JS_GetStringEncodingLength(JSContext* cx
+@@ -4550,85 +4537,16 @@ JS_GetStringEncodingLength(JSContext* cx
   * encoded into bytes with no error reported. Otherwise it returns the number
   * of bytes that are necessary to encode the string. If that exceeds the
   * length parameter, the string will be cut and only length bytes will be
@@ -693,7 +693,7 @@ diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
 diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h
 --- a/js/src/jsfriendapi.h
 +++ b/js/src/jsfriendapi.h
-@@ -8,19 +8,19 @@
+@@ -8,21 +8,22 @@
  #define jsfriendapi_h
  
  #include "mozilla/Atomics.h"
@@ -708,12 +708,15 @@ diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h
 +#include "js/AutoByteString.h"
  #include "js/CallArgs.h"
  #include "js/CallNonGenericMethod.h"
++#include "js/CharacterEncoding.h"
  #include "js/Class.h"
  #include "js/ErrorReport.h"
  #include "js/HeapAPI.h"
  #include "js/StableStringChars.h"
  #include "js/TypeDecls.h"
  #include "js/Utility.h"
+ 
+ #ifndef JS_STACK_GROWTH_DIRECTION
 diff --git a/js/src/moz.build b/js/src/moz.build
 --- a/js/src/moz.build
 +++ b/js/src/moz.build

+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434730.patch → frg/work-js/mozilla-release/patches/1330661-1-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434731.patch → frg/work-js/mozilla-release/patches/1330661-2-64a1.patch


+ 7 - 7
frg/work-js/mozilla-release/patches/mozilla-central-push_434732.patch → frg/work-js/mozilla-release/patches/1330661-3-64a1.patch

@@ -3,13 +3,13 @@
 # Date 1536088990 18000
 #      Tue Sep 04 14:23:10 2018 -0500
 # Node ID 603f0c6003b3ec81be847304b71124fcda216c20
-# Parent  52fdd53134d53366a895a458be9ae9300da1df95
+# Parent  5c127c3f8a13cf84144f107a115c977241733123
 Bug 1330661 - Baldr: move Assumptions out of Module (r=lth)
 
 diff --git a/dom/indexedDB/ActorsChild.cpp b/dom/indexedDB/ActorsChild.cpp
 --- a/dom/indexedDB/ActorsChild.cpp
 +++ b/dom/indexedDB/ActorsChild.cpp
-@@ -3477,26 +3477,18 @@ PreprocessHelper::ProcessCurrentStream()
+@@ -3482,26 +3482,18 @@ PreprocessHelper::ProcessCurrentStream()
          ContinueWithStatus(rv);
        }
        return;
@@ -39,7 +39,7 @@ diff --git a/dom/indexedDB/ActorsChild.cpp b/dom/indexedDB/ActorsChild.cpp
 diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 --- a/js/src/jsapi.cpp
 +++ b/js/src/jsapi.cpp
-@@ -7649,20 +7649,19 @@ JS::IsWasmModuleObject(HandleObject obj)
+@@ -7579,20 +7579,19 @@ JS::IsWasmModuleObject(HandleObject obj)
  JS_PUBLIC_API(RefPtr<JS::WasmModule>)
  JS::GetWasmModule(HandleObject obj)
  {
@@ -66,7 +66,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 diff --git a/js/src/jsapi.h b/js/src/jsapi.h
 --- a/js/src/jsapi.h
 +++ b/js/src/jsapi.h
-@@ -4690,18 +4690,17 @@ extern JS_PUBLIC_API(RefPtr<WasmModule>)
+@@ -4633,18 +4633,17 @@ extern JS_PUBLIC_API(RefPtr<WasmModule>)
  GetWasmModule(HandleObject obj);
  
  /**
@@ -342,7 +342,7 @@ diff --git a/js/src/wasm/WasmCompile.cpp b/js/src/wasm/WasmCompile.cpp
  
      baselineEnabled = cx->options().wasmBaseline() || gcEnabled;
 @@ -49,19 +87,16 @@ CompileArgs::initFromContext(JSContext* 
-     gcTypesConfigured = gcEnabled ? HasGcTypes::True : HasGcTypes::False;
+     gcTypesEnabled = gcEnabled ? HasGcTypes::True : HasGcTypes::False;
      testTiering = (cx->options().testWasmAwaitTier2() || JitOptions.wasmDelayTier2) && !gcEnabled;
  
      // Debug information such as source view or debug traps will require
@@ -402,7 +402,7 @@ diff --git a/js/src/wasm/WasmCompile.h b/js/src/wasm/WasmCompile.h
      bool debugEnabled;
      bool ionEnabled;
      bool sharedMemoryEnabled;
-     HasGcTypes gcTypesConfigured;
+     HasGcTypes gcTypesEnabled;
      bool testTiering;
  
 -    CompileArgs(Assumptions&& assumptions, ScriptedCaller&& scriptedCaller)
@@ -414,7 +414,7 @@ diff --git a/js/src/wasm/WasmCompile.h b/js/src/wasm/WasmCompile.h
          debugEnabled(false),
          ionEnabled(false),
          sharedMemoryEnabled(false),
-         gcTypesConfigured(HasGcTypes::False),
+         gcTypesEnabled(HasGcTypes::False),
          testTiering(false)
      {}
  

+ 26 - 26
frg/work-js/mozilla-release/patches/mozilla-central-push_434733.patch → frg/work-js/mozilla-release/patches/1330661-4-64a1.patch

@@ -3,7 +3,7 @@
 # Date 1536089157 18000
 #      Tue Sep 04 14:25:57 2018 -0500
 # Node ID 0dd32db49222b18a9c8e6fef0305bce9b32d9a17
-# Parent  603f0c6003b3ec81be847304b71124fcda216c20
+# Parent  d4911cb485ac1bc113f3d008a02055cedae30c0a
 Bug 1330661 - Baldr: make the BuildIdOp a process global (r=lth,mccr8)
 
 diff --git a/js/src/jsapi-tests/testXDR.cpp b/js/src/jsapi-tests/testXDR.cpp
@@ -31,7 +31,7 @@ diff --git a/js/src/jsapi-tests/testXDR.cpp b/js/src/jsapi-tests/testXDR.cpp
 diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 --- a/js/src/jsapi.cpp
 +++ b/js/src/jsapi.cpp
-@@ -7621,19 +7621,19 @@ JS::FinishIncrementalEncoding(JSContext*
+@@ -7551,19 +7551,19 @@ JS::FinishIncrementalEncoding(JSContext*
      if (!script)
          return false;
      if (!script->scriptSource()->xdrFinalizeEncoder(buffer))
@@ -57,7 +57,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 diff --git a/js/src/jsapi.h b/js/src/jsapi.h
 --- a/js/src/jsapi.h
 +++ b/js/src/jsapi.h
-@@ -4649,23 +4649,24 @@ SetAsmJSCacheOps(JSContext* cx, const As
+@@ -4592,23 +4592,24 @@ SetAsmJSCacheOps(JSContext* cx, const As
  
  /**
   * Return the buildId (represented as a sequence of characters) associated with
@@ -86,7 +86,7 @@ diff --git a/js/src/jsapi.h b/js/src/jsapi.h
 diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 --- a/js/src/shell/js.cpp
 +++ b/js/src/shell/js.cpp
-@@ -3629,17 +3629,16 @@ WorkerMain(WorkerInput* input)
+@@ -3583,17 +3583,16 @@ WorkerMain(WorkerInput* input)
          js_delete(sc);
          js_delete(input);
      });
@@ -101,10 +101,10 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
      JS::SetWarningReporter(cx, WarningReporter);
      js::SetPreserveWrapperCallback(cx, DummyPreserveWrapperCallback);
      JS_InitDestroyPrincipalsCallback(cx, ShellPrincipals::destroy);
-     JS_SetDestroyCompartmentCallback(cx, DestroyShellCompartmentPrivate);
  
      js::UseInternalJobQueues(cx);
-@@ -9879,16 +9878,18 @@ main(int argc, char** argv, char** envp)
+ 
+@@ -9353,16 +9352,18 @@ main(int argc, char** argv, char** envp)
      }
  
      if (op.getBoolOption("suppress-minidump"))
@@ -123,13 +123,13 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
      if (cpuCount >= 0)
          SetFakeCPUCount(cpuCount);
  
-@@ -9919,17 +9920,16 @@ main(int argc, char** argv, char** envp)
+@@ -9392,17 +9393,16 @@ main(int argc, char** argv, char** envp)
+     if (availMem > 0)
          JS_SetGCParametersBasedOnAvailableMemory(cx, availMem);
  
      JS_SetTrustedPrincipals(cx, &ShellPrincipals::fullyTrusted);
      JS_SetSecurityCallbacks(cx, &ShellPrincipals::securityCallbacks);
      JS_InitDestroyPrincipalsCallback(cx, ShellPrincipals::destroy);
-     JS_SetDestroyCompartmentCallback(cx, DestroyShellCompartmentPrivate);
  
      JS_AddInterruptCallback(cx, ShellInterruptCallback);
 -    JS::SetBuildIdOp(cx, ShellBuildId);
@@ -204,7 +204,7 @@ diff --git a/js/src/vm/Runtime.cpp b/js/src/vm/Runtime.cpp
 diff --git a/js/src/vm/Runtime.h b/js/src/vm/Runtime.h
 --- a/js/src/vm/Runtime.h
 +++ b/js/src/vm/Runtime.h
-@@ -395,18 +395,16 @@ struct JSRuntime : public js::MallocProv
+@@ -387,18 +387,16 @@ struct JSRuntime : public js::MallocProv
                                                   mozilla::LinkedList<JS::PersistentRooted<void*>>>> heapRoots;
  
      void tracePersistentRoots(JSTracer* trc);
@@ -223,7 +223,7 @@ diff --git a/js/src/vm/Runtime.h b/js/src/vm/Runtime.h
    public:
      void setTrustedPrincipals(const JSPrincipals* p) { trustedPrincipals_ = p; }
      const JSPrincipals* trustedPrincipals() const { return trustedPrincipals_; }
-@@ -1188,11 +1186,14 @@ SetValueRangeToNull(Value* vec, size_t l
+@@ -1144,11 +1142,14 @@ SetValueRangeToNull(Value* vec, size_t l
  }
  
  extern const JSSecurityCallbacks NullSecurityCallbacks;
@@ -346,25 +346,25 @@ diff --git a/js/src/wasm/AsmJS.cpp b/js/src/wasm/AsmJS.cpp
 diff --git a/js/xpconnect/src/XPCJSRuntime.cpp b/js/xpconnect/src/XPCJSRuntime.cpp
 --- a/js/xpconnect/src/XPCJSRuntime.cpp
 +++ b/js/xpconnect/src/XPCJSRuntime.cpp
-@@ -22,16 +22,17 @@
+@@ -20,16 +20,17 @@
+ 
  #include "nsExceptionHandler.h"
  #include "nsIMemoryInfoDumper.h"
  #include "nsIMemoryReporter.h"
  #include "nsIObserverService.h"
  #include "nsIDebug2.h"
  #include "nsIDocShell.h"
- #include "nsIDocument.h"
  #include "nsIRunnable.h"
 +#include "nsIPlatformInfo.h"
+ #include "amIAddonManager.h"
  #include "nsPIDOMWindow.h"
  #include "nsPrintfCString.h"
- #include "nsWindowSizes.h"
  #include "mozilla/Preferences.h"
  #include "mozilla/Telemetry.h"
  #include "mozilla/Services.h"
  #include "mozilla/dom/ScriptLoader.h"
  #include "mozilla/dom/ScriptSettings.h"
-@@ -1039,16 +1040,39 @@ OnLargeAllocationFailureCallback()
+@@ -1025,16 +1026,39 @@ OnLargeAllocationFailureCallback()
      RefPtr<LargeAllocationFailureRunnable> r = new LargeAllocationFailureRunnable;
      if (NS_WARN_IF(NS_FAILED(NS_DispatchToMainThread(r)))) {
          return;
@@ -404,7 +404,7 @@ diff --git a/js/xpconnect/src/XPCJSRuntime.cpp b/js/xpconnect/src/XPCJSRuntime.c
      n += mWrappedJSMap->SizeOfIncludingThis(mallocSizeOf);
      n += mIID2NativeInterfaceMap->SizeOfIncludingThis(mallocSizeOf);
      n += mClassInfo2NativeSetMap->ShallowSizeOfIncludingThis(mallocSizeOf);
-@@ -2946,16 +2970,17 @@ XPCJSRuntime::Initialize(JSContext* cx)
+@@ -2942,16 +2966,17 @@ XPCJSRuntime::Initialize(JSContext* cx)
      JS_SetWrapObjectCallbacks(cx, &WrapObjectCallbacks);
      js::SetPreserveWrapperCallback(cx, PreserveWrapper);
      JS_InitReadPrincipalsCallback(cx, nsJSPrincipals::ReadPrincipals);
@@ -425,13 +425,13 @@ diff --git a/js/xpconnect/src/XPCJSRuntime.cpp b/js/xpconnect/src/XPCJSRuntime.c
 diff --git a/js/xpconnect/src/xpcpublic.h b/js/xpconnect/src/xpcpublic.h
 --- a/js/xpconnect/src/xpcpublic.h
 +++ b/js/xpconnect/src/xpcpublic.h
-@@ -746,11 +746,18 @@ bool IsNotUAWidget(JSContext* cx, JSObje
- bool IsChromeOrXBLOrUAWidget(JSContext* cx, JSObject* /* unused */);
+@@ -698,11 +698,18 @@ namespace dom {
+ bool IsChromeOrXBL(JSContext* cx, JSObject* /* unused */);
  
  /**
-  * Same as IsChromeOrXBLOrUAWidget but can be used in worker threads as well.
+  * Same as IsChromeOrXBL but can be used in worker threads as well.
   */
- bool ThreadSafeIsChromeOrXBLOrUAWidget(JSContext* cx, JSObject* obj);
+ bool ThreadSafeIsChromeOrXBL(JSContext* cx, JSObject* obj);
  
  } // namespace dom
 +
@@ -482,11 +482,11 @@ diff --git a/xpcom/base/CycleCollectedJSRuntime.cpp b/xpcom/base/CycleCollectedJ
  #include "nsThreadUtils.h"
  #include "xpcpublic.h"
  
- #ifdef NIGHTLY_BUILD
- // For performance reasons, we make the JS Dev Error Interceptor a Nightly-only feature.
- #define MOZ_JS_DEV_ERROR_INTERCEPTOR = 1
- #endif // NIGHTLY_BUILD
-@@ -481,39 +480,16 @@ NoteJSChildGrayWrapperShim(void* aData, 
+ using namespace mozilla;
+ using namespace mozilla::dom;
+ 
+ namespace mozilla {
+@@ -476,39 +475,16 @@ NoteJSChildGrayWrapperShim(void* aData, 
  static const JSZoneParticipant sJSZoneCycleCollectorGlobal;
  
  static
@@ -526,7 +526,7 @@ diff --git a/xpcom/base/CycleCollectedJSRuntime.cpp b/xpcom/base/CycleCollectedJ
  
  CycleCollectedJSRuntime::CycleCollectedJSRuntime(JSContext* aCx)
    : mGCThingCycleCollectorGlobal(sGCThingCycleCollectorGlobal)
-@@ -550,17 +526,16 @@ CycleCollectedJSRuntime::CycleCollectedJ
+@@ -542,17 +518,16 @@ CycleCollectedJSRuntime::CycleCollectedJ
      // relevant to the main-thread.
      mPrevGCNurseryCollectionCallback = JS::SetGCNurseryCollectionCallback(
        aCx, GCNurseryCollectionCallback);
@@ -547,7 +547,7 @@ diff --git a/xpcom/base/CycleCollectedJSRuntime.cpp b/xpcom/base/CycleCollectedJ
 diff --git a/xpcom/base/CycleCollectedJSRuntime.h b/xpcom/base/CycleCollectedJSRuntime.h
 --- a/xpcom/base/CycleCollectedJSRuntime.h
 +++ b/xpcom/base/CycleCollectedJSRuntime.h
-@@ -422,14 +422,11 @@ inline bool AddToCCKind(JS::TraceKind aK
+@@ -377,14 +377,11 @@ inline bool AddToCCKind(JS::TraceKind aK
  {
    return aKind == JS::TraceKind::Object ||
           aKind == JS::TraceKind::Script ||

+ 2 - 2
frg/work-js/mozilla-release/patches/mozilla-central-push_434735.patch → frg/work-js/mozilla-release/patches/1330661-5-64a1.patch

@@ -3,7 +3,7 @@
 # Date 1536097612 18000
 #      Tue Sep 04 16:46:52 2018 -0500
 # Node ID 9287930e6a4909b294912977557739df1fe1284d
-# Parent  f4400f4e6b8500d2a7ebaacbaa1a361f18c9feac
+# Parent  85593c5f91c25d9904b055ed3f7f0c8a693a9a47
 Bug 1330661 - Baldr: move LinkData out of Module (r=lth)
 
 diff --git a/js/src/wasm/AsmJS.cpp b/js/src/wasm/AsmJS.cpp
@@ -1207,7 +1207,7 @@ diff --git a/js/src/wasm/WasmModule.cpp b/js/src/wasm/WasmModule.cpp
                  return false;
          }
  
-         HasGcTypes gcTypesConfigured = code().metadata().temporaryGcTypesConfigured;
+         HasGcTypes gcTypesEnabled = code().metadata().temporaryHasGcTypes;
          const CodeTier& tier2 = code().codeTier(Tier::Ion);
 @@ -289,67 +155,64 @@ Module::finishTier2(UniqueLinkDataTier l
  void

+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434620.patch → frg/work-js/mozilla-release/patches/1440468-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434798.patch → frg/work-js/mozilla-release/patches/1467907-64a1.patch


+ 16 - 16
frg/work-js/mozilla-release/patches/1482153-64a1.patch

@@ -2,7 +2,7 @@
 # User Jon Coppeard <jcoppeard@mozilla.com>
 # Date 1539693852 -3600
 # Node ID 180eb0ea89bcf02d511d4e05f493583d125177ea
-# Parent  46370329903d7f13999909ae936bc02dc8f2c155
+# Parent  0960a5fbb75d1bb8c16114296ebebef5de8031f1
 Bug 1482153 - Provide a way of associating a private value with a script or module r=jandem rs=hsivonen
 
 diff --git a/dom/script/ModuleScript.cpp b/dom/script/ModuleScript.cpp
@@ -142,7 +142,7 @@ diff --git a/dom/script/ScriptLoader.h b/dom/script/ScriptLoader.h
 diff --git a/js/src/builtin/ModuleObject.cpp b/js/src/builtin/ModuleObject.cpp
 --- a/js/src/builtin/ModuleObject.cpp
 +++ b/js/src/builtin/ModuleObject.cpp
-@@ -841,31 +841,39 @@ ModuleNamespaceObject*
+@@ -831,31 +831,39 @@ ModuleNamespaceObject*
  ModuleObject::namespace_()
  {
      Value value = getReservedSlot(NamespaceSlot);
@@ -182,7 +182,7 @@ diff --git a/js/src/builtin/ModuleObject.cpp b/js/src/builtin/ModuleObject.cpp
      initReservedSlot(EnvironmentSlot, ObjectValue(*initialEnvironment));
  }
  
-@@ -1019,28 +1027,16 @@ ModuleObject::metaObject() const
+@@ -1009,28 +1017,16 @@ ModuleObject::metaObject() const
  void
  ModuleObject::setMetaObject(JSObject* obj)
  {
@@ -211,7 +211,7 @@ diff --git a/js/src/builtin/ModuleObject.cpp b/js/src/builtin/ModuleObject.cpp
  
  /* static */ void
  ModuleObject::trace(JSTracer* trc, JSObject* obj)
-@@ -1688,15 +1684,17 @@ js::GetOrCreateModuleMetaObject(JSContex
+@@ -1667,15 +1663,17 @@ js::GetOrCreateModuleMetaObject(JSContex
          return nullptr;
  
      JS::ModuleMetadataHook func = cx->runtime()->moduleMetadataHook;
@@ -233,7 +233,7 @@ diff --git a/js/src/builtin/ModuleObject.cpp b/js/src/builtin/ModuleObject.cpp
 diff --git a/js/src/builtin/ModuleObject.h b/js/src/builtin/ModuleObject.h
 --- a/js/src/builtin/ModuleObject.h
 +++ b/js/src/builtin/ModuleObject.h
-@@ -250,17 +250,17 @@ class ModuleObject : public NativeObject
+@@ -251,17 +251,17 @@ class ModuleObject : public NativeObject
      enum ModuleSlot
      {
          ScriptSlot = 0,
@@ -252,7 +252,7 @@ diff --git a/js/src/builtin/ModuleObject.h b/js/src/builtin/ModuleObject.h
          ImportBindingsSlot,
          FunctionDeclarationsSlot,
          DFSIndexSlot,
-@@ -302,34 +302,32 @@ class ModuleObject : public NativeObject
+@@ -303,34 +303,32 @@ class ModuleObject : public NativeObject
      Scope* enclosingScope() const;
      ModuleEnvironmentObject& initialEnvironment() const;
      ModuleEnvironmentObject* environment() const;
@@ -291,9 +291,9 @@ diff --git a/js/src/builtin/ModuleObject.h b/js/src/builtin/ModuleObject.h
 diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 --- a/js/src/jsapi.cpp
 +++ b/js/src/jsapi.cpp
-@@ -4850,25 +4850,37 @@ JS::CompileModule(JSContext* cx, const R
+@@ -4752,25 +4752,37 @@ JS::CompileModule(JSContext* cx, const R
      AssertHeapIsIdle();
-     CHECK_REQUEST(cx);
+     CHECK_THREAD(cx);
  
      module.set(frontend::CompileModule(cx, options, srcBuf));
      return !!module;
@@ -333,12 +333,12 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
  JS::ModuleInstantiate(JSContext* cx, JS::HandleObject moduleArg)
  {
      AssertHeapIsIdle();
-     CHECK_REQUEST(cx);
+     CHECK_THREAD(cx);
      releaseAssertSameCompartment(cx, moduleArg);
 diff --git a/js/src/jsapi.h b/js/src/jsapi.h
 --- a/js/src/jsapi.h
 +++ b/js/src/jsapi.h
-@@ -3044,31 +3044,31 @@ extern JS_PUBLIC_API(JSString*)
+@@ -2935,31 +2935,31 @@ extern JS_PUBLIC_API(JSString*)
  JS_DecompileScript(JSContext* cx, JS::Handle<JSScript*> script);
  
  extern JS_PUBLIC_API(JSString*)
@@ -372,7 +372,7 @@ diff --git a/js/src/jsapi.h b/js/src/jsapi.h
  GetModuleMetadataHook(JSRuntime* rt);
  
  /**
-@@ -3082,27 +3082,40 @@ SetModuleMetadataHook(JSRuntime* rt, Mod
+@@ -2973,27 +2973,40 @@ SetModuleMetadataHook(JSRuntime* rt, Mod
   * Parse the given source buffer as a module in the scope of the current global
   * of cx and return a source text module record.
   */
@@ -565,7 +565,7 @@ diff --git a/js/src/shell/ModuleLoader.js b/js/src/shell/ModuleLoader.js
 diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 --- a/js/src/shell/js.cpp
 +++ b/js/src/shell/js.cpp
-@@ -4304,28 +4304,28 @@ SetModuleResolveHook(JSContext* cx, unsi
+@@ -4315,28 +4315,28 @@ SetModuleResolveHook(JSContext* cx, unsi
      Handle<GlobalObject*> global = cx->global();
      global->setReservedSlot(GlobalAppSlotModuleResolveHook, args[0]);
  
@@ -596,7 +596,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
  
      if (!result.isObject() || !result.toObject().is<ModuleObject>()) {
           JS_ReportErrorASCII(cx, "Module resolve hook did not return Module object");
-@@ -4354,35 +4354,82 @@ SetModuleMetadataHook(JSContext* cx, uns
+@@ -4365,35 +4365,82 @@ SetModuleMetadataHook(JSContext* cx, uns
      Handle<GlobalObject*> global = cx->global();
      global->setReservedSlot(GlobalAppSlotModuleMetadataHook, args[0]);
  
@@ -681,7 +681,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
      if (sc->moduleLoadPath) {
          JSString* str = JS_NewStringCopyZ(cx, sc->moduleLoadPath.get());
          if (!str)
-@@ -6874,16 +6921,24 @@ static const JSFunctionSpecWithHelp shel
+@@ -7023,16 +7070,24 @@ static const JSFunctionSpecWithHelp shel
  "  be implemented by the module loader."),
  
      JS_FN_HELP("setModuleMetadataHook", SetModuleMetadataHook, 1, 0,
@@ -709,7 +709,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 diff --git a/js/src/vm/JSScript.h b/js/src/vm/JSScript.h
 --- a/js/src/vm/JSScript.h
 +++ b/js/src/vm/JSScript.h
-@@ -751,22 +751,32 @@ class ScriptSourceObject : public Native
+@@ -752,22 +752,32 @@ class ScriptSourceObject : public Native
      JSScript* introductionScript() const {
          Value value = getReservedSlot(INTRODUCTION_SCRIPT_SLOT);
          if (value.isUndefined()) {
@@ -750,7 +750,7 @@ diff --git a/js/src/vm/JSScript.h b/js/src/vm/JSScript.h
 diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
 --- a/js/src/vm/SelfHosting.cpp
 +++ b/js/src/vm/SelfHosting.cpp
-@@ -2162,19 +2162,21 @@ intrinsic_HostResolveImportedModule(JSCo
+@@ -2130,19 +2130,21 @@ intrinsic_HostResolveImportedModule(JSCo
  
      JS::ModuleResolveHook moduleResolveHook = cx->runtime()->moduleResolveHook;
      if (!moduleResolveHook) {

+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434986.patch → frg/work-js/mozilla-release/patches/1483323-1-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434987.patch → frg/work-js/mozilla-release/patches/1483323-2-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434988.patch → frg/work-js/mozilla-release/patches/1483323-3-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434989.patch → frg/work-js/mozilla-release/patches/1483323-4-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434990.patch → frg/work-js/mozilla-release/patches/1483323-5-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/1483962-63a1.patch → frg/work-js/mozilla-release/patches/1483962-64a1.patch


File diff suppressed because it is too large
+ 131 - 249
frg/work-js/mozilla-release/patches/1485066-01-64a1.patch


+ 9 - 33
frg/work-js/mozilla-release/patches/mozilla-central_434999.patch → frg/work-js/mozilla-release/patches/1485066-02-64a1.patch

@@ -3,13 +3,13 @@
 # Date 1536135909 25200
 #      Wed Sep 05 01:25:09 2018 -0700
 # Node ID 775159907c734fcef22df5b9a26316aa78dad732
-# Parent  52ae4d84b11e507483430e922d25b2083ad5c73e
+# Parent  953f74180f06e38dfb9d4ac19e72c2bcc50cd0e9
 Bug 1485066 - Part 2: Use UniqueChars as return-type in functions previously using JSAutoByteString out-param. r=Waldo
 
 diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
 --- a/js/src/builtin/TestingFunctions.cpp
 +++ b/js/src/builtin/TestingFunctions.cpp
-@@ -2192,18 +2192,17 @@ DumpHeap(JSContext* cx, unsigned argc, V
+@@ -2193,18 +2193,17 @@ DumpHeap(JSContext* cx, unsigned argc, V
      if (args.length() > i) {
          Value v = args[i];
          if (v.isString()) {
@@ -666,7 +666,7 @@ diff --git a/js/src/ctypes/CTypes.cpp b/js/src/ctypes/CTypes.cpp
 diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
 --- a/js/src/jsfriendapi.cpp
 +++ b/js/src/jsfriendapi.cpp
-@@ -828,19 +828,19 @@ FormatValue(JSContext* cx, const Value& 
+@@ -833,19 +833,19 @@ FormatValue(JSContext* cx, const Value& 
          str = ToString<CanGC>(cx, v);
      } else {
          str = ToString<CanGC>(cx, v);
@@ -688,7 +688,7 @@ diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
  
  // Wrapper for JS_sprintf_append() that reports allocation failure to the
  // context.
-@@ -889,20 +889,19 @@ FormatFrame(JSContext* cx, const FrameIt
+@@ -894,20 +894,19 @@ FormatFrame(JSContext* cx, const FrameIt
          if (!GetFunctionThis(cx, iter.abstractFramePtr(), &thisVal))
              return nullptr;
      }
@@ -711,7 +711,7 @@ diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
      if (!buf)
          return nullptr;
  
-@@ -991,20 +990,19 @@ FormatFrame(JSContext* cx, const FrameIt
+@@ -996,20 +995,19 @@ FormatFrame(JSContext* cx, const FrameIt
              RootedString thisValStr(cx, ToString<CanGC>(cx, thisVal));
              if (!thisValStr) {
                  if (cx->isThrowingOutOfMemory())
@@ -737,7 +737,7 @@ diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
 diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 --- a/js/src/shell/js.cpp
 +++ b/js/src/shell/js.cpp
-@@ -1609,20 +1609,19 @@ ParseCompileOptions(JSContext* cx, Compi
+@@ -1571,20 +1571,19 @@ ParseCompileOptions(JSContext* cx, Compi
          return false;
      if (v.isNull()) {
          options.setFile(nullptr);
@@ -761,30 +761,6 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
          options.setElement(&v.toObject());
  
      if (!JS_GetProperty(cx, opts, "elementAttributeName", &v))
-@@ -4755,21 +4754,20 @@ BinParse(JSContext* cx, unsigned argc, V
-             stringFormat = optionFormat.toString();
-             JS::Rooted<JSLinearString*> linearFormat(cx);
-             linearFormat = stringFormat->ensureLinear(cx);
-             if (StringEqualsAscii(linearFormat, "multipart")) {
-                 useMultipart = true;
-             } else if (StringEqualsAscii(linearFormat, "simple")) {
-                 useMultipart = false;
-             } else {
--                UniqueChars printable;
-+                UniqueChars printable = ValueToPrintableUTF8(cx, optionFormat);
-                 JS_ReportErrorUTF8(cx,
-                                    "Unknown value for option `format`, expected 'multipart' or "
--                                   "'simple', got %s",
--                                   ValueToPrintableUTF8(cx, optionFormat, &printable));
-+                                   "'simple', got %s", printable.get());
-                 return false;
-             }
-         } else {
-             const char* typeName = InformalValueTypeName(optionFormat);
-             JS_ReportErrorASCII(cx, "option `format` should be a string, got %s", typeName);
-             return false;
-         }
-     }
 diff --git a/js/src/vm/BytecodeUtil.cpp b/js/src/vm/BytecodeUtil.cpp
 --- a/js/src/vm/BytecodeUtil.cpp
 +++ b/js/src/vm/BytecodeUtil.cpp
@@ -976,7 +952,7 @@ diff --git a/js/src/vm/EnvironmentObject.cpp b/js/src/vm/EnvironmentObject.cpp
 diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
 --- a/js/src/vm/Interpreter.cpp
 +++ b/js/src/vm/Interpreter.cpp
-@@ -5334,18 +5334,17 @@ js::NewArrayOperationWithTemplate(JSCont
+@@ -5338,18 +5338,17 @@ js::NewArrayOperationWithTemplate(JSCont
      return obj;
  }
  
@@ -999,7 +975,7 @@ diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
 diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
 --- a/js/src/vm/JSContext.cpp
 +++ b/js/src/vm/JSContext.cpp
-@@ -887,20 +887,18 @@ js::ReportErrorNumberUCArray(JSContext* 
+@@ -885,20 +885,18 @@ js::ReportErrorNumberUCArray(JSContext* 
      ReportError(cx, &report, callback, userRef);
  
      return warning;
@@ -1025,7 +1001,7 @@ diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
 diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
 --- a/js/src/vm/SelfHosting.cpp
 +++ b/js/src/vm/SelfHosting.cpp
-@@ -298,20 +298,17 @@ ThrowErrorWithType(JSContext* cx, JSExnT
+@@ -340,20 +340,17 @@ ThrowErrorWithType(JSContext* cx, JSExnT
          if (val.isInt32()) {
              JSString* str = ToString<CanGC>(cx, val);
              if (!str)

+ 44 - 71
frg/work-js/mozilla-release/patches/mozilla-central-push_435000.patch → frg/work-js/mozilla-release/patches/1485066-03-64a1.patch

@@ -3,13 +3,13 @@
 # Date 1536135909 25200
 #      Wed Sep 05 01:25:09 2018 -0700
 # Node ID 8cc4218166b8e2de6712dfbadf5a927401e49d3d
-# Parent  775159907c734fcef22df5b9a26316aa78dad732
+# Parent  28ccc32e811153e18c20a0823a90aa42f25c9447
 Bug 1485066 - Part 3: Replace calls to JS_EncodeString for string comparison with StringEqualsAscii. r=Waldo
 
 diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
 --- a/js/src/builtin/TestingFunctions.cpp
 +++ b/js/src/builtin/TestingFunctions.cpp
-@@ -2910,27 +2910,27 @@ const JSPropertySpec CloneBufferObject::
+@@ -2911,27 +2911,27 @@ const JSPropertySpec CloneBufferObject::
      JS_PS_END
  };
  
@@ -42,7 +42,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
  static bool
  Serialize(JSContext* cx, unsigned argc, Value* vp)
  {
-@@ -2947,23 +2947,23 @@ Serialize(JSContext* cx, unsigned argc, 
+@@ -2948,23 +2948,23 @@ Serialize(JSContext* cx, unsigned argc, 
          RootedValue v(cx);
          if (!JS_GetProperty(cx, opts, "SharedArrayBuffer", &v))
              return false;
@@ -69,7 +69,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
          }
  
          if (!JS_GetProperty(cx, opts, "scope", &v))
-@@ -4117,41 +4117,41 @@ SetGCCallback(JSContext* cx, unsigned ar
+@@ -4115,41 +4115,41 @@ SetGCCallback(JSContext* cx, unsigned ar
  
      RootedValue v(cx);
      if (!JS_GetProperty(cx, opts, "action", &v))
@@ -118,7 +118,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
  
      if (gcCallback::prevMajorGC) {
          JS_SetGCCallback(cx, nullptr, nullptr);
-@@ -4160,27 +4160,27 @@ SetGCCallback(JSContext* cx, unsigned ar
+@@ -4158,27 +4158,27 @@ SetGCCallback(JSContext* cx, unsigned ar
      }
  
      if (gcCallback::prevMinorGC) {
@@ -151,7 +151,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
 diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 --- a/js/src/shell/js.cpp
 +++ b/js/src/shell/js.cpp
-@@ -1467,43 +1467,46 @@ Options(JSContext* cx, unsigned argc, Va
+@@ -1429,43 +1429,46 @@ Options(JSContext* cx, unsigned argc, Va
  {
      CallArgs args = CallArgsFromVp(argc, vp);
  
@@ -206,7 +206,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
      bool found = false;
      if (names && oldContextOptions.extraWarnings()) {
          names = JS_sprintf_append(std::move(names), "%s%s", found ? "," : "", "strict");
-@@ -5327,23 +5330,16 @@ class AutoCStringVector
+@@ -4864,23 +4867,16 @@ class AutoCStringVector
      }
      char* operator[](size_t i) const {
          return argv_[i];
@@ -230,7 +230,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
  {
      // Windows will break arguments in argv by various spaces, so we wrap each
      // argument in quotes and escape quotes within. Even with quotes, \ will be
-@@ -5412,36 +5408,42 @@ NestedShell(JSContext* cx, unsigned argc
+@@ -4949,36 +4945,42 @@ NestedShell(JSContext* cx, unsigned argc
      // Propagate selected flags from the current shell
      for (unsigned i = 0; i < sPropagatedFlags.length(); i++) {
          UniqueChars flags = DuplicateString(cx, sPropagatedFlags[i]);
@@ -289,7 +289,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 diff --git a/js/xpconnect/src/Sandbox.cpp b/js/xpconnect/src/Sandbox.cpp
 --- a/js/xpconnect/src/Sandbox.cpp
 +++ b/js/xpconnect/src/Sandbox.cpp
-@@ -849,79 +849,83 @@ xpc::GlobalProperties::Parse(JSContext* 
+@@ -919,61 +919,65 @@ xpc::GlobalProperties::Parse(JSContext* 
      for (uint32_t i = 0; i < length; i++) {
          RootedValue nameValue(cx);
          ok = JS_GetElement(cx, obj, i, &nameValue);
@@ -304,92 +304,65 @@ diff --git a/js/xpconnect/src/Sandbox.cpp b/js/xpconnect/src/Sandbox.cpp
 +        JSFlatString* nameStr = JS_FlattenString(cx, nameValue.toString());
 +        if (!nameStr)
              return false;
--        if (!strcmp(name.get(), "Blob")) {
-+        if (JS_FlatStringEqualsAscii(nameStr, "Blob")) {
-             Blob = true;
--        } else if (!strcmp(name.get(), "ChromeUtils")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "ChromeUtils")) {
-             ChromeUtils = true;
--        } else if (!strcmp(name.get(), "CSS")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "CSS")) {
+-        if (!strcmp(name.get(), "CSS")) {
++        if (JS_FlatStringEqualsAscii(nameStr, "CSS")) {
              CSS = true;
--        } else if (!strcmp(name.get(), "CSSRule")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "CSSRule")) {
-             CSSRule = true;
--        } else if (!strcmp(name.get(), "Directory")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "Directory")) {
-             Directory = true;
--        } else if (!strcmp(name.get(), "DOMParser")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "DOMParser")) {
-             DOMParser = true;
--        } else if (!strcmp(name.get(), "Element")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "Element")) {
-             Element = true;
--        } else if (!strcmp(name.get(), "Event")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "Event")) {
-             Event = true;
--        } else if (!strcmp(name.get(), "File")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "File")) {
-             File = true;
--        } else if (!strcmp(name.get(), "FileReader")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "FileReader")) {
-             FileReader = true;
--        } else if (!strcmp(name.get(), "FormData")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "FormData")) {
-             FormData = true;
--        } else if (!strcmp(name.get(), "InspectorUtils")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "InspectorUtils")) {
-             InspectorUtils = true;
--        } else if (!strcmp(name.get(), "MessageChannel")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "MessageChannel")) {
-             MessageChannel = true;
--        } else if (!strcmp(name.get(), "Node")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "Node")) {
-             Node = true;
--        } else if (!strcmp(name.get(), "NodeFilter")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "NodeFilter")) {
-             NodeFilter = true;
--        } else if (!strcmp(name.get(), "TextDecoder")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "TextDecoder")) {
-             TextDecoder = true;
+-        } else if (!strcmp(name.get(), "indexedDB")) {
++        } else if (JS_FlatStringEqualsAscii(nameStr, "indexedDB")) {
+             indexedDB = true;
+-        } else if (!strcmp(name.get(), "XMLHttpRequest")) {
++        } else if (JS_FlatStringEqualsAscii(nameStr, "XMLHttpRequest")) {
+             XMLHttpRequest = true;
 -        } else if (!strcmp(name.get(), "TextEncoder")) {
 +        } else if (JS_FlatStringEqualsAscii(nameStr, "TextEncoder")) {
              TextEncoder = true;
+-        } else if (!strcmp(name.get(), "TextDecoder")) {
++        } else if (JS_FlatStringEqualsAscii(nameStr, "TextDecoder")) {
+             TextDecoder = true;
 -        } else if (!strcmp(name.get(), "URL")) {
 +        } else if (JS_FlatStringEqualsAscii(nameStr, "URL")) {
              URL = true;
 -        } else if (!strcmp(name.get(), "URLSearchParams")) {
 +        } else if (JS_FlatStringEqualsAscii(nameStr, "URLSearchParams")) {
              URLSearchParams = true;
--        } else if (!strcmp(name.get(), "XMLHttpRequest")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "XMLHttpRequest")) {
-             XMLHttpRequest = true;
--        } else if (!strcmp(name.get(), "XMLSerializer")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "XMLSerializer")) {
-             XMLSerializer = true;
 -        } else if (!strcmp(name.get(), "atob")) {
 +        } else if (JS_FlatStringEqualsAscii(nameStr, "atob")) {
              atob = true;
 -        } else if (!strcmp(name.get(), "btoa")) {
 +        } else if (JS_FlatStringEqualsAscii(nameStr, "btoa")) {
              btoa = true;
--        } else if (!strcmp(name.get(), "caches")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "caches")) {
-             caches = true;
+-        } else if (!strcmp(name.get(), "Blob")) {
++        } else if (JS_FlatStringEqualsAscii(nameStr, "Blob")) {
+             Blob = true;
+-        } else if (!strcmp(name.get(), "Directory")) {
++        } else if (JS_FlatStringEqualsAscii(nameStr, "Directory")) {
+             Directory = true;
+-        } else if (!strcmp(name.get(), "File")) {
++        } else if (JS_FlatStringEqualsAscii(nameStr, "File")) {
+             File = true;
 -        } else if (!strcmp(name.get(), "crypto")) {
 +        } else if (JS_FlatStringEqualsAscii(nameStr, "crypto")) {
              crypto = true;
--        } else if (!strcmp(name.get(), "fetch")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "fetch")) {
-             fetch = true;
--        } else if (!strcmp(name.get(), "indexedDB")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "indexedDB")) {
-             indexedDB = true;
  #ifdef MOZ_WEBRTC
 -        } else if (!strcmp(name.get(), "rtcIdentityProvider")) {
 +        } else if (JS_FlatStringEqualsAscii(nameStr, "rtcIdentityProvider")) {
              rtcIdentityProvider = true;
  #endif
+-        } else if (!strcmp(name.get(), "fetch")) {
++        } else if (JS_FlatStringEqualsAscii(nameStr, "fetch")) {
+             fetch = true;
+-        } else if (!strcmp(name.get(), "caches")) {
++        } else if (JS_FlatStringEqualsAscii(nameStr, "caches")) {
+             caches = true;
+-        } else if (!strcmp(name.get(), "FileReader")) {
++        } else if (JS_FlatStringEqualsAscii(nameStr, "FileReader")) {
+             fileReader = true;
+-        } else if (!strcmp(name.get(), "MessageChannel")) {
++        } else if (JS_FlatStringEqualsAscii(nameStr, "MessageChannel")) {
+             messageChannel = true;
+-        } else if (!strcmp(name.get(), "ChromeUtils")) {
++        } else if (JS_FlatStringEqualsAscii(nameStr, "ChromeUtils")) {
+             ChromeUtils = true;
          } else {
 +            RootedString nameStr(cx, nameValue.toString());
 +            JS::UniqueChars name = JS_EncodeStringToUTF8(cx, nameStr);

+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_435001.patch → frg/work-js/mozilla-release/patches/1485066-04-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_435002.patch → frg/work-js/mozilla-release/patches/1485066-05-64a1.patch


+ 8 - 8
frg/work-js/mozilla-release/patches/mozilla-central_435003.patch → frg/work-js/mozilla-release/patches/1485066-06-64a1.patch

@@ -3,7 +3,7 @@
 # Date 1536135910 25200
 #      Wed Sep 05 01:25:10 2018 -0700
 # Node ID 21181aea32fa3d7f72ad96dc521c36a37eb2ee58
-# Parent  a7f57108d94f9fc4a3172cd6500e192fd810314f
+# Parent  82c8d7479310939a5f5810d8db123f144b96e15b
 Bug 1485066 - Part 6: Reduce char-string-char roundtrips when quoting strings. r=Waldo
 
 diff --git a/js/src/builtin/Object.cpp b/js/src/builtin/Object.cpp
@@ -34,7 +34,7 @@ diff --git a/js/src/builtin/Object.cpp b/js/src/builtin/Object.cpp
 diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
 --- a/js/src/builtin/String.cpp
 +++ b/js/src/builtin/String.cpp
-@@ -609,32 +609,36 @@ IsString(HandleValue v)
+@@ -610,32 +610,36 @@ IsString(HandleValue v)
      return v.isString() || (v.isObject() && v.toObject().is<StringObject>());
  }
  
@@ -109,7 +109,7 @@ diff --git a/js/src/frontend/NameFunctions.cpp b/js/src/frontend/NameFunctions.c
 diff --git a/js/src/gc/Statistics.cpp b/js/src/gc/Statistics.cpp
 --- a/js/src/gc/Statistics.cpp
 +++ b/js/src/gc/Statistics.cpp
-@@ -568,28 +568,28 @@ UniqueChars
+@@ -564,28 +564,28 @@ UniqueChars
  Statistics::renderJsonSlice(size_t sliceNum) const
  {
      Sprinter printer(nullptr, false);
@@ -140,10 +140,10 @@ diff --git a/js/src/gc/Statistics.cpp b/js/src/gc/Statistics.cpp
  {
      va_list args;
      va_start(args, fmt);
-@@ -636,17 +636,17 @@ Statistics::renderJsonMessage(uint64_t t
+@@ -632,17 +632,17 @@ Statistics::renderJsonMessage(uint64_t t
      }
  
-     json.beginObjectProperty("totals"); // #24
+     json.beginObjectProperty("totals");
      formatJsonPhaseTimes(phaseTimes, json);
      json.endObject();
  
@@ -157,8 +157,8 @@ diff --git a/js/src/gc/Statistics.cpp b/js/src/gc/Statistics.cpp
  Statistics::formatJsonDescription(uint64_t timestamp, JSONPrinter& json) const
  {
      // If you change JSON properties here, please update:
-     // Telemetry ping code:
-     //   toolkit/components/telemetry/GCTelemetry.jsm
+     // Telemetry ping code: toolkit/components/telemetry/GCTelemetry.jsm
+     // Telemetry documentation: toolkit/components/telemetry/docs/data/main-ping.rst
 diff --git a/js/src/vm/BytecodeUtil.cpp b/js/src/vm/BytecodeUtil.cpp
 --- a/js/src/vm/BytecodeUtil.cpp
 +++ b/js/src/vm/BytecodeUtil.cpp
@@ -593,7 +593,7 @@ diff --git a/js/src/vm/UbiNodeCensus.cpp b/js/src/vm/UbiNodeCensus.cpp
  using namespace js;
  
  namespace JS {
-@@ -1256,21 +1257,17 @@ ParseBreakdown(JSContext* cx, HandleValu
+@@ -1082,21 +1083,17 @@ ParseBreakdown(JSContext* cx, HandleValu
          CountTypePtr noFilenameType(ParseChildBreakdown(cx, breakdown, cx->names().noFilename));
          if (!noFilenameType)
              return nullptr;

+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_435004.patch → frg/work-js/mozilla-release/patches/1485066-07-64a1.patch


+ 46 - 68
frg/work-js/mozilla-release/patches/mozilla-central_435005.patch → frg/work-js/mozilla-release/patches/1485066-08-64a1.patch

@@ -3,7 +3,7 @@
 # Date 1536152703 25200
 #      Wed Sep 05 06:05:03 2018 -0700
 # Node ID 9f5767f1b04cb1924e94e530acec5738edfb3e52
-# Parent  b19d4e73e016439dc5446f2bb17a34116086f5ee
+# Parent  e67428ebd8ec293b8466cbc969d2a6c9b8bc0777
 Bug 1485066 - Part 8: Rename JS_EncodeString to JS_EncodeStringToLatin1. r=Waldo
 
 diff --git a/dom/bindings/CallbackInterface.cpp b/dom/bindings/CallbackInterface.cpp
@@ -33,7 +33,7 @@ diff --git a/dom/bindings/CallbackInterface.cpp b/dom/bindings/CallbackInterface
 diff --git a/ipc/testshell/XPCShellEnvironment.cpp b/ipc/testshell/XPCShellEnvironment.cpp
 --- a/ipc/testshell/XPCShellEnvironment.cpp
 +++ b/ipc/testshell/XPCShellEnvironment.cpp
-@@ -78,17 +78,17 @@ static bool
+@@ -76,17 +76,17 @@ static bool
  Print(JSContext *cx, unsigned argc, JS::Value *vp)
  {
      JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -52,7 +52,7 @@ diff --git a/ipc/testshell/XPCShellEnvironment.cpp b/ipc/testshell/XPCShellEnvir
      fputc('\n', stdout);
      args.rval().setUndefined();
      return true;
-@@ -114,17 +114,17 @@ Dump(JSContext *cx, unsigned argc, JS::V
+@@ -112,17 +112,17 @@ Dump(JSContext *cx, unsigned argc, JS::V
      JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
  
      if (!args.length())
@@ -71,7 +71,7 @@ diff --git a/ipc/testshell/XPCShellEnvironment.cpp b/ipc/testshell/XPCShellEnvir
      return true;
  }
  
-@@ -142,17 +142,17 @@ Load(JSContext *cx,
+@@ -141,17 +141,17 @@ Load(JSContext *cx,
          JS_ReportErrorASCII(cx, "Trying to load() into a non-global object");
          return false;
      }
@@ -90,7 +90,7 @@ diff --git a/ipc/testshell/XPCShellEnvironment.cpp b/ipc/testshell/XPCShellEnvir
              if (!filename)
                  return false;
              JS_ReportErrorUTF8(cx, "cannot open file '%s' for reading", filename.get());
-@@ -343,17 +343,17 @@ XPCShellEnvironment::ProcessFile(JSConte
+@@ -342,17 +342,17 @@ XPCShellEnvironment::ProcessFile(JSConte
  
              ok = JS_ExecuteScript(cx, script, &result);
              if (ok && !result.isUndefined()) {
@@ -162,7 +162,7 @@ diff --git a/js/src/builtin/Profilers.cpp b/js/src/builtin/Profilers.cpp
 diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
 --- a/js/src/builtin/TestingFunctions.cpp
 +++ b/js/src/builtin/TestingFunctions.cpp
-@@ -2189,17 +2189,17 @@ DumpHeap(JSContext* cx, unsigned argc, V
+@@ -2190,17 +2190,17 @@ DumpHeap(JSContext* cx, unsigned argc, V
          }
      }
  
@@ -181,7 +181,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
                      if (!fileNameBytes)
                          return false;
                      JS_ReportErrorUTF8(cx, "can't open %s", fileNameBytes.get());
-@@ -2755,17 +2755,17 @@ class CloneBufferObject : public NativeO
+@@ -2756,17 +2756,17 @@ class CloneBufferObject : public NativeO
              uint8_t* dataBytes = nullptr;
              js::GetArrayBufferLengthAndData(buffer, &nbytes, &isSharedMemory, &dataBytes);
              MOZ_ASSERT(!isSharedMemory);
@@ -200,7 +200,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
  
          if (nbytes == 0 || (nbytes % sizeof(uint64_t) != 0)) {
              JS_ReportErrorASCII(cx, "Invalid length for clonebuffer data");
-@@ -4730,17 +4730,17 @@ SetTimeZone(JSContext* cx, unsigned argc
+@@ -4818,17 +4818,17 @@ SetTimeZone(JSContext* cx, unsigned argc
  #if defined(_WIN32)
          return _putenv_s("TZ", "") == 0;
  #else
@@ -219,7 +219,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
              return false;
          }
      } else {
-@@ -4820,17 +4820,17 @@ SetDefaultLocale(JSContext* cx, unsigned
+@@ -4908,17 +4908,17 @@ SetDefaultLocale(JSContext* cx, unsigned
                              : containsOnlyValidBCP47Characters(str->twoByteChars(nogc), length);
          }
  
@@ -461,7 +461,7 @@ diff --git a/js/src/jsapi-tests/tests.h b/js/src/jsapi-tests/tests.h
 diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 --- a/js/src/jsapi.cpp
 +++ b/js/src/jsapi.cpp
-@@ -6048,17 +6048,17 @@ JS_DecodeBytes(JSContext* cx, const char
+@@ -5980,17 +5980,17 @@ JS_DecodeBytes(JSContext* cx, const char
      }
  
      CopyAndInflateChars(dst, src, srclen);
@@ -483,7 +483,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
 --- a/js/src/jsfriendapi.cpp
 +++ b/js/src/jsfriendapi.cpp
-@@ -827,17 +827,17 @@ FormatValue(JSContext* cx, const Value& 
+@@ -832,17 +832,17 @@ FormatValue(JSContext* cx, const Value& 
          AutoRealm ar(cx, &v.toObject());
          str = ToString<CanGC>(cx, v);
      } else {
@@ -502,7 +502,7 @@ diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
          return "[function]";
      return buf;
  }
-@@ -888,17 +888,17 @@ FormatFrame(JSContext* cx, const FrameIt
+@@ -893,17 +893,17 @@ FormatFrame(JSContext* cx, const FrameIt
      {
          if (!GetFunctionThis(cx, iter.abstractFramePtr(), &thisVal))
              return nullptr;
@@ -521,7 +521,7 @@ diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
      } else {
          buf = sprintf_append(cx, std::move(buf), "%d <TOP LEVEL>", num);
      }
-@@ -934,17 +934,17 @@ FormatFrame(JSContext* cx, const FrameIt
+@@ -939,17 +939,17 @@ FormatFrame(JSContext* cx, const FrameIt
              }
  
              UniqueChars nameBytes;
@@ -540,7 +540,7 @@ diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
                  }
                  fi++;
              }
-@@ -989,17 +989,17 @@ FormatFrame(JSContext* cx, const FrameIt
+@@ -994,17 +994,17 @@ FormatFrame(JSContext* cx, const FrameIt
              UniqueChars thisValBytes;
              RootedString thisValStr(cx, ToString<CanGC>(cx, thisVal));
              if (!thisValStr) {
@@ -739,7 +739,7 @@ diff --git a/js/src/shell/OSObject.cpp b/js/src/shell/OSObject.cpp
 diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 --- a/js/src/shell/js.cpp
 +++ b/js/src/shell/js.cpp
-@@ -1358,17 +1358,17 @@ CreateMappedArrayBuffer(JSContext* cx, u
+@@ -1320,17 +1320,17 @@ CreateMappedArrayBuffer(JSContext* cx, u
          return false;
      // It's a little bizarre to resolve relative to the script, but for testing
      // I need a file at a known location, and the only good way I know of to do
@@ -758,7 +758,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
          if (!JS::ToUint32(cx, args[1], &offset))
              return false;
      }
-@@ -1548,17 +1548,17 @@ LoadScript(JSContext* cx, unsigned argc,
+@@ -1510,17 +1510,17 @@ LoadScript(JSContext* cx, unsigned argc,
                                        "load");
              return false;
          }
@@ -777,7 +777,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
              .setUTF8(true)
              .setIsRunOnce(true)
              .setNoScriptRval(true);
-@@ -1610,17 +1610,17 @@ ParseCompileOptions(JSContext* cx, Compi
+@@ -1572,17 +1572,17 @@ ParseCompileOptions(JSContext* cx, Compi
      if (!JS_GetProperty(cx, opts, "fileName", &v))
          return false;
      if (v.isNull()) {
@@ -796,7 +796,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
      if (!JS_GetProperty(cx, opts, "element", &v))
          return false;
      if (v.isObject())
-@@ -2093,17 +2093,17 @@ Evaluate(JSContext* cx, unsigned argc, V
+@@ -2055,17 +2055,17 @@ Evaluate(JSContext* cx, unsigned argc, V
      }
  
      return JS_WrapValue(cx, args.rval());
@@ -815,7 +815,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
      file = fopen(pathname.get(), "rb");
      if (!file) {
          ReportCantOpenErrorUnknownEncoding(cx, pathname.get());
-@@ -2189,17 +2189,17 @@ Run(JSContext* cx, unsigned argc, Value*
+@@ -2151,17 +2151,17 @@ Run(JSContext* cx, unsigned argc, Value*
  
      JS::SourceBufferHolder srcBuf(chars.twoByteRange().begin().get(), str->length(),
                                    JS::SourceBufferHolder::NoOwnership);
@@ -834,7 +834,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
                 .setFileAndLine(filename.get(), 1)
                 .setIsRunOnce(true)
                 .setNoScriptRval(true);
-@@ -3147,17 +3147,17 @@ DisassFile(JSContext* cx, unsigned argc,
+@@ -3109,17 +3109,17 @@ DisassFile(JSContext* cx, unsigned argc,
          args.rval().setUndefined();
          return true;
      }
@@ -853,7 +853,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
          CompileOptions options(cx);
          options.setIntroductionType("js shell disFile")
                 .setUTF8(true)
-@@ -4371,17 +4371,17 @@ ParseModule(JSContext* cx, unsigned argc
+@@ -4241,17 +4241,17 @@ ParseModule(JSContext* cx, unsigned argc
      if (args.length() > 1) {
          if (!args[1].isString()) {
              const char* typeName = InformalValueTypeName(args[1]);
@@ -872,7 +872,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
          options.setFileAndLine("<string>", 1);
      }
  
-@@ -5424,17 +5424,17 @@ NestedShell(JSContext* cx, unsigned argc
+@@ -4961,17 +4961,17 @@ NestedShell(JSContext* cx, unsigned argc
              // As a special case, if the caller passes "--js-cache", use
              // "--js-cache=$(jsCacheDir)" instead.
              arg = JS_smprintf("--js-cache=%s", jsCacheDir);
@@ -891,7 +891,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
              return false;
      }
  
-@@ -7155,17 +7155,17 @@ SetARMHwCapFlags(JSContext* cx, unsigned
+@@ -6683,17 +6683,17 @@ SetARMHwCapFlags(JSContext* cx, unsigned
          return false;
      }
  
@@ -910,7 +910,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
  
      args.rval().setUndefined();
      return true;
-@@ -9052,17 +9052,17 @@ ProcessArgs(JSContext* cx, OptionParser*
+@@ -8537,17 +8537,17 @@ ProcessArgs(JSContext* cx, OptionParser*
          RootedString jspath(cx, JS_NewStringCopyZ(cx, path));
          if (!jspath)
              return false;
@@ -951,7 +951,7 @@ diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp
  
      if (!JS_GetProperty(cx, opts, "lineNumber", &v))
          return false;
-@@ -4562,17 +4562,17 @@ class MOZ_STACK_CLASS Debugger::ScriptQu
+@@ -4552,17 +4552,17 @@ class MOZ_STACK_CLASS Debugger::ScriptQu
      /*
       * Given that parseQuery or omittedQuery has been called, prepare to match
       * scripts. Set urlCString and displayURLChars as appropriate.
@@ -970,7 +970,7 @@ diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp
      }
  
      bool delazifyScripts() {
-@@ -4945,17 +4945,17 @@ class MOZ_STACK_CLASS Debugger::ObjectQu
+@@ -4935,17 +4935,17 @@ class MOZ_STACK_CLASS Debugger::ObjectQu
      UniqueChars classNameCString;
  
      /*
@@ -992,7 +992,7 @@ diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp
 diff --git a/js/src/vm/ErrorObject.cpp b/js/src/vm/ErrorObject.cpp
 --- a/js/src/vm/ErrorObject.cpp
 +++ b/js/src/vm/ErrorObject.cpp
-@@ -140,17 +140,17 @@ js::ErrorObject::getOrCreateErrorReport(
+@@ -130,17 +130,17 @@ js::ErrorObject::getOrCreateErrorReport(
      // the nitty-gritty malloc stuff.
      JSErrorReport report;
  
@@ -1036,7 +1036,7 @@ diff --git a/js/src/vm/Probes.cpp b/js/src/vm/Probes.cpp
 diff --git a/js/xpconnect/loader/mozJSComponentLoader.cpp b/js/xpconnect/loader/mozJSComponentLoader.cpp
 --- a/js/xpconnect/loader/mozJSComponentLoader.cpp
 +++ b/js/xpconnect/loader/mozJSComponentLoader.cpp
-@@ -1260,17 +1260,17 @@ mozJSComponentLoader::ExtractExports(JSC
+@@ -1215,17 +1215,17 @@ mozJSComponentLoader::ExtractExports(JSC
                  return NS_ERROR_FAILURE;
              return ReportOnCallerUTF8(cxhelper, ERROR_GETTING_SYMBOL,
                                        aInfo, bytes.get());
@@ -1058,7 +1058,7 @@ diff --git a/js/xpconnect/loader/mozJSComponentLoader.cpp b/js/xpconnect/loader/
 diff --git a/js/xpconnect/src/Sandbox.cpp b/js/xpconnect/src/Sandbox.cpp
 --- a/js/xpconnect/src/Sandbox.cpp
 +++ b/js/xpconnect/src/Sandbox.cpp
-@@ -1539,17 +1539,17 @@ OptionsBase::ParseString(const char* nam
+@@ -1594,17 +1594,17 @@ OptionsBase::ParseString(const char* nam
      if (!found)
          return true;
  
@@ -1080,7 +1080,7 @@ diff --git a/js/xpconnect/src/Sandbox.cpp b/js/xpconnect/src/Sandbox.cpp
 diff --git a/js/xpconnect/src/XPCComponents.cpp b/js/xpconnect/src/XPCComponents.cpp
 --- a/js/xpconnect/src/XPCComponents.cpp
 +++ b/js/xpconnect/src/XPCComponents.cpp
-@@ -242,17 +242,17 @@ nsXPCComponents_Interfaces::Resolve(nsIX
+@@ -260,17 +260,17 @@ nsXPCComponents_Interfaces::Resolve(nsIX
  {
      RootedObject obj(cx, objArg);
      RootedId id(cx, idArg);
@@ -1093,13 +1093,13 @@ diff --git a/js/xpconnect/src/XPCComponents.cpp b/js/xpconnect/src/XPCComponents
 +    JS::UniqueChars name = JS_EncodeStringToLatin1(cx, str);
  
      // we only allow interfaces by name here
-     if (name && name[0] != '{') {
-         const nsXPTInterfaceInfo* info = nsXPTInterfaceInfo::ByName(name.get());
-         if (!info)
-             return NS_OK;
+     if (name && name.get()[0] != '{') {
+         nsCOMPtr<nsIInterfaceInfo> info =
+             ShimInterfaceInfo::MaybeConstruct(name.get(), cx);
  
-         nsCOMPtr<nsIJSIID> nsid = nsJSIID::NewID(info);
-@@ -621,17 +621,17 @@ nsXPCComponents_Classes::Resolve(nsIXPCo
+         if (!info) {
+             XPTInterfaceInfoManager::GetSingleton()->
+@@ -669,17 +669,17 @@ nsXPCComponents_Classes::Resolve(nsIXPCo
  
  {
      RootedId id(cx, idArg);
@@ -1118,7 +1118,7 @@ diff --git a/js/xpconnect/src/XPCComponents.cpp b/js/xpconnect/src/XPCComponents
              RootedObject idobj(cx);
              if (NS_SUCCEEDED(xpc->WrapNative(cx, obj,
                                               static_cast<nsIJSCID*>(nsid),
-@@ -830,17 +830,17 @@ nsXPCComponents_ClassesByID::Resolve(nsI
+@@ -883,17 +883,17 @@ nsXPCComponents_ClassesByID::Resolve(nsI
  {
      RootedObject obj(cx, objArg);
      RootedId id(cx, idArg);
@@ -1137,7 +1137,7 @@ diff --git a/js/xpconnect/src/XPCComponents.cpp b/js/xpconnect/src/XPCComponents
              nsXPConnect* xpc = nsXPConnect::XPConnect();
              RootedObject idobj(cx);
              if (NS_SUCCEEDED(xpc->WrapNative(cx, obj,
-@@ -998,17 +998,17 @@ nsXPCComponents_Results::Resolve(nsIXPCo
+@@ -1058,17 +1058,17 @@ nsXPCComponents_Results::Resolve(nsIXPCo
                                   jsid idArg, bool* resolvedp,
                                   bool* _retval)
  {
@@ -1156,7 +1156,7 @@ diff --git a/js/xpconnect/src/XPCComponents.cpp b/js/xpconnect/src/XPCComponents
              if (!strcmp(name.get(), rv_name)) {
                  *resolvedp = true;
                  if (!JS_DefinePropertyById(cx, obj, id, (uint32_t)rv,
-@@ -1164,17 +1164,17 @@ nsXPCComponents_ID::CallOrConstruct(nsIX
+@@ -1229,17 +1229,17 @@ nsXPCComponents_ID::CallOrConstruct(nsIX
      }
  
      // convert the first argument into a string and see if it looks like an id
@@ -1175,7 +1175,7 @@ diff --git a/js/xpconnect/src/XPCComponents.cpp b/js/xpconnect/src/XPCComponents
          return ThrowAndFail(NS_ERROR_XPC_BAD_ID_STRING, cx, _retval);
  
      // make the new object and return it.
-@@ -1383,17 +1383,17 @@ struct MOZ_STACK_CLASS ExceptionArgParse
+@@ -1453,17 +1453,17 @@ struct MOZ_STACK_CLASS ExceptionArgParse
      /*
       * Parsing helpers.
       */
@@ -1194,7 +1194,7 @@ diff --git a/js/xpconnect/src/XPCComponents.cpp b/js/xpconnect/src/XPCComponents
          return JS::ToUint32(cx, v, (uint32_t*) &eResult);
      }
  
-@@ -1881,17 +1881,17 @@ nsXPCComponents_Constructor::CallOrConst
+@@ -1961,17 +1961,17 @@ nsXPCComponents_Constructor::CallOrConst
      JS::UniqueChars cInitializerBytes;
  
      if (args.length() >= 3) {
@@ -1216,7 +1216,7 @@ diff --git a/js/xpconnect/src/XPCComponents.cpp b/js/xpconnect/src/XPCComponents
 diff --git a/js/xpconnect/src/XPCConvert.cpp b/js/xpconnect/src/XPCConvert.cpp
 --- a/js/xpconnect/src/XPCConvert.cpp
 +++ b/js/xpconnect/src/XPCConvert.cpp
-@@ -1346,17 +1346,17 @@ XPCConvert::JSValToXPCException(MutableH
+@@ -1127,17 +1127,17 @@ XPCConvert::JSValToXPCException(MutableH
              // particular info and our 'result' should reflect that.
  
              // otherwise we'll just try to convert it to a string
@@ -1235,7 +1235,7 @@ diff --git a/js/xpconnect/src/XPCConvert.cpp b/js/xpconnect/src/XPCConvert.cpp
                                        nullptr, exceptn, cx, s.address());
          }
      }
-@@ -1414,18 +1414,17 @@ XPCConvert::JSValToXPCException(MutableH
+@@ -1195,18 +1195,17 @@ XPCConvert::JSValToXPCException(MutableH
          }
      }
  
@@ -1258,7 +1258,7 @@ diff --git a/js/xpconnect/src/XPCConvert.cpp b/js/xpconnect/src/XPCConvert.cpp
 diff --git a/js/xpconnect/src/XPCShellImpl.cpp b/js/xpconnect/src/XPCShellImpl.cpp
 --- a/js/xpconnect/src/XPCShellImpl.cpp
 +++ b/js/xpconnect/src/XPCShellImpl.cpp
-@@ -245,17 +245,17 @@ ReadLine(JSContext* cx, unsigned argc, V
+@@ -244,17 +244,17 @@ ReadLine(JSContext* cx, unsigned argc, V
          str = JS::ToString(cx, args[0]);
          if (!str)
              return false;
@@ -1296,7 +1296,7 @@ diff --git a/js/xpconnect/src/XPCShellImpl.cpp b/js/xpconnect/src/XPCShellImpl.c
              if (!filename)
                  return false;
              JS_ReportErrorUTF8(cx, "cannot open file '%s' for reading",
-@@ -721,17 +721,17 @@ ProcessLine(AutoJSAPI& jsapi, const char
+@@ -719,17 +719,17 @@ ProcessLine(AutoJSAPI& jsapi, const char
      if (!JS_ExecuteScript(cx, script, &result))
          return false;
  
@@ -1340,7 +1340,7 @@ diff --git a/js/xpconnect/src/XPCThrower.cpp b/js/xpconnect/src/XPCThrower.cpp
 diff --git a/js/xpconnect/src/XPCWrappedNativeJSOps.cpp b/js/xpconnect/src/XPCWrappedNativeJSOps.cpp
 --- a/js/xpconnect/src/XPCWrappedNativeJSOps.cpp
 +++ b/js/xpconnect/src/XPCWrappedNativeJSOps.cpp
-@@ -295,17 +295,17 @@ DefinePropertyIfFound(XPCCallContext& cc
+@@ -311,17 +311,17 @@ DefinePropertyIfFound(XPCCallContext& cc
              RootedObject jso(ccx);
              nsresult rv = NS_OK;
  
@@ -1359,28 +1359,6 @@ diff --git a/js/xpconnect/src/XPCWrappedNativeJSOps.cpp b/js/xpconnect/src/XPCWr
                      break;
  
                  to = wrapperToReflectInterfaceNames->FindTearOff(iface2, true, &rv);
-diff --git a/toolkit/recordreplay/ipc/JSControl.cpp b/toolkit/recordreplay/ipc/JSControl.cpp
---- a/toolkit/recordreplay/ipc/JSControl.cpp
-+++ b/toolkit/recordreplay/ipc/JSControl.cpp
-@@ -798,17 +798,17 @@ RecordReplay_Dump(JSContext* aCx, unsign
-   // This method is an alternative to dump() that can be used in places where
-   // thread events are disallowed.
-   CallArgs args = CallArgsFromVp(aArgc, aVp);
-   for (size_t i = 0; i < args.length(); i++) {
-     RootedString str(aCx, ToString(aCx, args[i]));
-     if (!str) {
-       return false;
-     }
--    JS::UniqueChars cstr = JS_EncodeString(aCx, str);
-+    JS::UniqueChars cstr = JS_EncodeStringToLatin1(aCx, str);
-     if (!cstr) {
-       return false;
-     }
-     Print("%s", cstr.get());
-   }
- 
-   args.rval().setUndefined();
-   return true;
 diff --git a/tools/fuzzing/messagemanager/MessageManagerFuzzer.cpp b/tools/fuzzing/messagemanager/MessageManagerFuzzer.cpp
 --- a/tools/fuzzing/messagemanager/MessageManagerFuzzer.cpp
 +++ b/tools/fuzzing/messagemanager/MessageManagerFuzzer.cpp

+ 6 - 33
frg/work-js/mozilla-release/patches/mozilla-central-push_435006.patch → frg/work-js/mozilla-release/patches/1485066-09-64a1.patch

@@ -3,7 +3,7 @@
 # Date 1536135911 25200
 #      Wed Sep 05 01:25:11 2018 -0700
 # Node ID aa11c398f118ceee4bc586e896b4132186c692b6
-# Parent  9f5767f1b04cb1924e94e530acec5738edfb3e52
+# Parent  99e73c5c140ee863822b092d6126909fa7230984
 Bug 1485066 - Part 9: Additional miscellaneous clean-ups around EncodeString callers. r=Waldo
 
 diff --git a/js/public/Proxy.h b/js/public/Proxy.h
@@ -207,37 +207,10 @@ diff --git a/js/src/proxy/ScriptedProxyHandler.cpp b/js/src/proxy/ScriptedProxyH
  // ES8 rev 0c1bd3004329336774cbc90de727cd0cf5f11e93 9.5.10 Proxy.[[Delete]](P)
  bool
  ScriptedProxyHandler::delete_(JSContext* cx, HandleObject proxy, HandleId id,
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -4745,20 +4745,19 @@ BinParse(JSContext* cx, unsigned argc, V
-         RootedValue optionFormat(cx);
-         if (!JS_GetProperty(cx, objOptions, "format", &optionFormat))
-             return false;
- 
-         if (optionFormat.isUndefined()) {
-             // By default, `useMultipart` is `true`.
-             useMultipart = true;
-         } else if (optionFormat.isString()) {
--            RootedString stringFormat(cx);
--            stringFormat = optionFormat.toString();
--            JS::Rooted<JSLinearString*> linearFormat(cx);
--            linearFormat = stringFormat->ensureLinear(cx);
-+            RootedLinearString linearFormat(cx, optionFormat.toString()->ensureLinear(cx));
-+            if (!linearFormat)
-+                return false;
-             if (StringEqualsAscii(linearFormat, "multipart")) {
-                 useMultipart = true;
-             } else if (StringEqualsAscii(linearFormat, "simple")) {
-                 useMultipart = false;
-             } else {
-                 UniqueChars printable = ValueToPrintableUTF8(cx, optionFormat);
-                 JS_ReportErrorUTF8(cx,
-                                    "Unknown value for option `format`, expected 'multipart' or "
 diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp
 --- a/js/src/vm/Debugger.cpp
 +++ b/js/src/vm/Debugger.cpp
-@@ -5427,17 +5427,17 @@ Debugger::wrapLazyScript(JSContext* cx, 
+@@ -5395,17 +5395,17 @@ Debugger::wrapLazyScript(JSContext* cx, 
  JSObject*
  Debugger::wrapWasmScript(JSContext* cx, Handle<WasmInstanceObject*> wasmInstance)
  {
@@ -355,7 +328,7 @@ diff --git a/js/src/vm/JSObject.h b/js/src/vm/JSObject.h
 diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp
 --- a/js/src/vm/NativeObject.cpp
 +++ b/js/src/vm/NativeObject.cpp
-@@ -2451,17 +2451,17 @@ js::GetNameBoundInEnvironment(JSContext*
+@@ -2461,17 +2461,17 @@ js::GetNameBoundInEnvironment(JSContext*
          return GeneralizedGetProperty(cx, env, id, receiver, NameLookup, vp);
      return NativeGetPropertyInline<CanGC>(cx, env.as<NativeObject>(), receiver, id, NameLookup, vp);
  }
@@ -374,7 +347,7 @@ diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp
          if (!script)
              return true;
  
-@@ -2470,16 +2470,17 @@ MaybeReportUndeclaredVarAssignment(JSCon
+@@ -2480,16 +2480,17 @@ MaybeReportUndeclaredVarAssignment(JSCon
          if (IsStrictSetPC(pc))
              flags = JSREPORT_ERROR;
          else if (cx->realm()->behaviors().extraWarnings(cx))
@@ -392,7 +365,7 @@ diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp
  }
  
  /*
-@@ -2590,18 +2591,17 @@ js::SetPropertyOnProto(JSContext* cx, Ha
+@@ -2600,18 +2601,17 @@ js::SetPropertyOnProto(JSContext* cx, Ha
   * steps 4.d.i and 5.
   */
  template <QualifiedBool IsQualified>
@@ -415,7 +388,7 @@ diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp
 diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
 --- a/js/src/vm/SelfHosting.cpp
 +++ b/js/src/vm/SelfHosting.cpp
-@@ -289,24 +289,22 @@ ThrowErrorWithType(JSContext* cx, JSExnT
+@@ -331,24 +331,22 @@ ThrowErrorWithType(JSContext* cx, JSExnT
  #ifdef DEBUG
      const JSErrorFormatString* efs = GetErrorMessage(nullptr, errorNumber);
      MOZ_ASSERT(efs->argCount == args.length() - 1);

+ 6 - 31
frg/work-js/mozilla-release/patches/mozilla-central_435007.patch → frg/work-js/mozilla-release/patches/1485066-10-64a1.patch

@@ -3,7 +3,7 @@
 # Date 1536135911 25200
 #      Wed Sep 05 01:25:11 2018 -0700
 # Node ID 8fb73b65b5806c37ee76ef859682b735f9b3f588
-# Parent  aa11c398f118ceee4bc586e896b4132186c692b6
+# Parent  92c9d8c17f10a9fa13f336f6940fc82558ec21fb
 Bug 1485066 - Part 10: Remove ValueToPrintable{Latin1,UTF8}, add IdToPrintableUTF8. r=Waldo
 
 diff --git a/js/src/builtin/TypedObject.cpp b/js/src/builtin/TypedObject.cpp
@@ -164,31 +164,6 @@ diff --git a/js/src/proxy/SecurityWrapper.cpp b/js/src/proxy/SecurityWrapper.cpp
  
  template class js::SecurityWrapper<Wrapper>;
  template class js::SecurityWrapper<CrossCompartmentWrapper>;
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -4753,17 +4753,20 @@ BinParse(JSContext* cx, unsigned argc, V
-             RootedLinearString linearFormat(cx, optionFormat.toString()->ensureLinear(cx));
-             if (!linearFormat)
-                 return false;
-             if (StringEqualsAscii(linearFormat, "multipart")) {
-                 useMultipart = true;
-             } else if (StringEqualsAscii(linearFormat, "simple")) {
-                 useMultipart = false;
-             } else {
--                UniqueChars printable = ValueToPrintableUTF8(cx, optionFormat);
-+                UniqueChars printable = JS_EncodeStringToUTF8(cx, linearFormat);
-+                if (!printable)
-+                    return false;
-+
-                 JS_ReportErrorUTF8(cx,
-                                    "Unknown value for option `format`, expected 'multipart' or "
-                                    "'simple', got %s", printable.get());
-                 return false;
-             }
-         } else {
-             const char* typeName = InformalValueTypeName(optionFormat);
-             JS_ReportErrorASCII(cx, "option `format` should be a string, got %s", typeName);
 diff --git a/js/src/vm/BytecodeUtil.cpp b/js/src/vm/BytecodeUtil.cpp
 --- a/js/src/vm/BytecodeUtil.cpp
 +++ b/js/src/vm/BytecodeUtil.cpp
@@ -243,7 +218,7 @@ diff --git a/js/src/vm/EnvironmentObject.cpp b/js/src/vm/EnvironmentObject.cpp
 diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
 --- a/js/src/vm/Interpreter.cpp
 +++ b/js/src/vm/Interpreter.cpp
-@@ -5334,18 +5334,18 @@ js::NewArrayOperationWithTemplate(JSCont
+@@ -5338,18 +5338,18 @@ js::NewArrayOperationWithTemplate(JSCont
      return obj;
  }
  
@@ -267,7 +242,7 @@ diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
 diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
 --- a/js/src/vm/JSContext.cpp
 +++ b/js/src/vm/JSContext.cpp
-@@ -887,17 +887,17 @@ js::ReportErrorNumberUCArray(JSContext* 
+@@ -885,17 +885,17 @@ js::ReportErrorNumberUCArray(JSContext* 
      ReportError(cx, &report, callback, userRef);
  
      return warning;
@@ -328,7 +303,7 @@ diff --git a/js/src/vm/JSObject.cpp b/js/src/vm/JSObject.cpp
 diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp
 --- a/js/src/vm/NativeObject.cpp
 +++ b/js/src/vm/NativeObject.cpp
-@@ -2299,19 +2299,22 @@ GetNonexistentProperty(JSContext* cx, Ha
+@@ -2309,19 +2309,22 @@ GetNonexistentProperty(JSContext* cx, Ha
      pc += CodeSpec[*pc].length;
      if (Detecting(cx, script, pc))
          return true;
@@ -354,7 +329,7 @@ diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp
                         FakeMutableHandle<Value> vp)
  {
      return false;
-@@ -2470,18 +2473,17 @@ MaybeReportUndeclaredVarAssignment(JSCon
+@@ -2480,18 +2483,17 @@ MaybeReportUndeclaredVarAssignment(JSCon
          if (IsStrictSetPC(pc))
              flags = JSREPORT_ERROR;
          else if (cx->realm()->behaviors().extraWarnings(cx))
@@ -377,7 +352,7 @@ diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp
 diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
 --- a/js/src/vm/SelfHosting.cpp
 +++ b/js/src/vm/SelfHosting.cpp
-@@ -2852,18 +2852,22 @@ VerifyGlobalNames(JSContext* cx, Handle<
+@@ -2869,18 +2869,22 @@ VerifyGlobalNames(JSContext* cx, Handle<
                      nameMissing = true;
                      break;
                  }

+ 36 - 34
frg/work-js/mozilla-release/patches/mozilla-central-push_435008.patch → frg/work-js/mozilla-release/patches/1485066-11-64a1.patch

@@ -3,13 +3,13 @@
 # Date 1536141683 25200
 #      Wed Sep 05 03:01:23 2018 -0700
 # Node ID e13b67ae85248f2ce726cf815a561ec0936db732
-# Parent  8fb73b65b5806c37ee76ef859682b735f9b3f588
+# Parent  e8c683bde68b147fecb339ee8cbbf0553a7305a8
 Bug 1485066 - Part 11: Remove the unused |inBuf| argument from JS::FormatStackDump and change it to use Sprinter. r=Waldo
 
 diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
 --- a/js/src/builtin/TestingFunctions.cpp
 +++ b/js/src/builtin/TestingFunctions.cpp
-@@ -3300,17 +3300,17 @@ GetBacktrace(JSContext* cx, unsigned arg
+@@ -3301,17 +3301,17 @@ GetBacktrace(JSContext* cx, unsigned arg
              return false;
          showLocals = ToBoolean(v);
  
@@ -49,7 +49,7 @@ diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
  #ifdef ENABLE_BIGINT
  #include "builtin/BigInt.h"
  #endif
-@@ -803,72 +804,44 @@ JS_FRIEND_API(bool)
+@@ -810,70 +811,44 @@ JS_FRIEND_API(bool)
  js::DumpScript(JSContext* cx, JSScript* scriptArg)
  {
      return DumpScript(cx, scriptArg, stdout);
@@ -73,14 +73,12 @@ diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
 -     */
 -    RootedString str(cx);
 -    if (v.isObject()) {
--        if (IsCrossCompartmentWrapper(&v.toObject()))
--            return "[cross-compartment wrapper]";
 -        AutoRealm ar(cx, &v.toObject());
 +    if (IsCallable(v))
 +        return "[function]";
 +
-+    if (v.isObject() && IsCrossCompartmentWrapper(&v.toObject()))
-+        return "[cross-compartment wrapper]";
++//    if (v.isObject() && IsCrossCompartmentWrapper(&v.toObject()))
++//        return "[cross-compartment wrapper]";
 +
 +    JSString* str;
 +    {
@@ -140,7 +138,7 @@ diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
  
      RootedObject envChain(cx, iter.environmentChain(cx));
      JSAutoRealm ar(cx, envChain);
-@@ -882,33 +855,33 @@ FormatFrame(JSContext* cx, const FrameIt
+@@ -887,33 +862,33 @@ FormatFrame(JSContext* cx, const FrameIt
  
      RootedValue thisVal(cx);
      if (iter.hasUsableAbstractFramePtr() &&
@@ -182,7 +180,7 @@ diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
              RootedValue arg(cx);
              if (i < iter.numFormalArgs() && fi.closedOver()) {
                  arg = iter.callObj(cx).aliasedBinding(fi);
-@@ -924,203 +897,200 @@ FormatFrame(JSContext* cx, const FrameIt
+@@ -929,203 +904,200 @@ FormatFrame(JSContext* cx, const FrameIt
              } else {
                  arg = MagicValue(JS_OPTIMIZED_OUT);
              }
@@ -457,7 +455,7 @@ diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
  {
      AssertHeapIsIdle();
      CHECK_THREAD(cx);
-     cx->check(obj);
+     assertSameCompartment(cx, obj);
 diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h
 --- a/js/src/jsfriendapi.h
 +++ b/js/src/jsfriendapi.h
@@ -484,7 +482,7 @@ diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h
 diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 --- a/js/src/shell/js.cpp
 +++ b/js/src/shell/js.cpp
-@@ -4182,17 +4182,17 @@ StackDump(JSContext* cx, unsigned argc, 
+@@ -4135,17 +4135,17 @@ StackDump(JSContext* cx, unsigned argc, 
          JS_ReportErrorASCII(cx, "output file is closed");
          return false;
      }
@@ -506,7 +504,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 diff --git a/js/xpconnect/src/XPCDebug.cpp b/js/xpconnect/src/XPCDebug.cpp
 --- a/js/xpconnect/src/XPCDebug.cpp
 +++ b/js/xpconnect/src/XPCDebug.cpp
-@@ -48,15 +48,15 @@ xpc_DumpJSStack(bool showArgs, bool show
+@@ -42,15 +42,15 @@ xpc_DumpJSStack(bool showArgs, bool show
  }
  
  JS::UniqueChars
@@ -523,25 +521,29 @@ diff --git a/js/xpconnect/src/XPCDebug.cpp b/js/xpconnect/src/XPCDebug.cpp
      state.restore();
      return buf;
  }
-diff --git a/xpcom/base/CycleCollectedJSRuntime.cpp b/xpcom/base/CycleCollectedJSRuntime.cpp
---- a/xpcom/base/CycleCollectedJSRuntime.cpp
-+++ b/xpcom/base/CycleCollectedJSRuntime.cpp
-@@ -1637,17 +1637,17 @@ CycleCollectedJSRuntime::ErrorIntercepto
-   details.mType = *type;
-   // If `exn` isn't an exception object, `ExtractErrorValues` could end up calling
-   // `toString()`, which could in turn end up throwing an error. While this should
-   // work, we want to avoid that complex use case.
-   // Fortunately, we have already checked above that `exn` is an exception object,
-   // so nothing such should happen.
-   nsContentUtils::ExtractErrorValues(cx, value, details.mFilename, &details.mLine, &details.mColumn, details.mMessage);
- 
--  JS::UniqueChars buf = JS::FormatStackDump(cx, nullptr, /* showArgs = */ false, /* showLocals = */ false, /* showThisProps = */ false);
-+  JS::UniqueChars buf = JS::FormatStackDump(cx, /* showArgs = */ false, /* showLocals = */ false, /* showThisProps = */ false);
-   CopyUTF8toUTF16(mozilla::MakeStringSpan(buf.get()), details.mStack);
- 
-   mThrownError.emplace(std::move(details));
- }
- 
- void
- CycleCollectedJSRuntime::ClearRecentDevError()
- {
+diff --git a/xpcom/base/CycleCollectedJSRuntime.cpp.1485066-11.later b/xpcom/base/CycleCollectedJSRuntime.cpp.1485066-11.later
+new file mode 100644
+--- /dev/null
++++ b/xpcom/base/CycleCollectedJSRuntime.cpp.1485066-11.later
+@@ -0,0 +1,21 @@
++--- CycleCollectedJSRuntime.cpp
+++++ CycleCollectedJSRuntime.cpp
++@@ -1637,17 +1637,17 @@ CycleCollectedJSRuntime::ErrorIntercepto
++   details.mType = *type;
++   // If `exn` isn't an exception object, `ExtractErrorValues` could end up calling
++   // `toString()`, which could in turn end up throwing an error. While this should
++   // work, we want to avoid that complex use case.
++   // Fortunately, we have already checked above that `exn` is an exception object,
++   // so nothing such should happen.
++   nsContentUtils::ExtractErrorValues(cx, value, details.mFilename, &details.mLine, &details.mColumn, details.mMessage);
++ 
++-  JS::UniqueChars buf = JS::FormatStackDump(cx, nullptr, /* showArgs = */ false, /* showLocals = */ false, /* showThisProps = */ false);
+++  JS::UniqueChars buf = JS::FormatStackDump(cx, /* showArgs = */ false, /* showLocals = */ false, /* showThisProps = */ false);
++   CopyUTF8toUTF16(mozilla::MakeStringSpan(buf.get()), details.mStack);
++ 
++   mThrownError.emplace(std::move(details));
++ }
++ 
++ void
++ CycleCollectedJSRuntime::ClearRecentDevError()
++ {

+ 7 - 62
frg/work-js/mozilla-release/patches/mozilla-central_435009.patch → frg/work-js/mozilla-release/patches/1485066-12-64a1.patch

@@ -3,7 +3,7 @@
 # Date 1536135912 25200
 #      Wed Sep 05 01:25:12 2018 -0700
 # Node ID eb37a9c0cff43121655fa7a8a42bf4ec171cf848
-# Parent  e13b67ae85248f2ce726cf815a561ec0936db732
+# Parent  6e5d84b851320a64bb01fbebcb4c57a133f27a78
 Bug 1485066 - Part 12: Change the decompiler to return UTF-8 encoded strings. r=Waldo
 
 diff --git a/js/public/CharacterEncoding.h b/js/public/CharacterEncoding.h
@@ -101,7 +101,7 @@ diff --git a/js/src/perf/jsperf.cpp b/js/src/perf/jsperf.cpp
 diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 --- a/js/src/shell/js.cpp
 +++ b/js/src/shell/js.cpp
-@@ -3095,17 +3095,18 @@ DisassembleToString(JSContext* cx, unsig
+@@ -3057,17 +3057,18 @@ DisassembleToString(JSContext* cx, unsig
  {
      CallArgs args = CallArgsFromVp(argc, vp);
      Sprinter sprinter(cx);
@@ -238,11 +238,11 @@ diff --git a/js/src/vm/ForOfIterator.cpp b/js/src/vm/ForOfIterator.cpp
 diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
 --- a/js/src/vm/JSContext.cpp
 +++ b/js/src/vm/JSContext.cpp
-@@ -914,104 +914,91 @@ js::ReportIsNullOrUndefinedForPropertyAc
-         return;
-     }
+@@ -906,59 +906,57 @@ js::ReportIsNullOrUndefined(JSContext* c
+ {
+     MOZ_ASSERT(v.isNullOrUndefined());
  
-     UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, v, nullptr);
+     UniqueChars bytes = DecompileValueGenerator(cx, spindex, v, nullptr);
      if (!bytes)
          return;
  
@@ -264,61 +264,6 @@ diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
      }
  }
  
--static UniqueChars
--EncodeIdAsLatin1(JSContext* cx, HandleId id)
--{
--    RootedValue idVal(cx, IdToValue(id));
--    JSString* idStr = ValueToSource(cx, idVal);
--    if (!idStr)
--        return nullptr;
--
--    return EncodeLatin1(cx, idStr);
--}
--
- void
- js::ReportIsNullOrUndefinedForPropertyAccess(JSContext* cx, HandleValue v, HandleId key,
-                                              bool reportScanStack)
- {
-     MOZ_ASSERT(v.isNullOrUndefined());
- 
--    UniqueChars keyBytes = EncodeIdAsLatin1(cx, key);
-+    UniqueChars keyBytes = IdToPrintableUTF8(cx, key, IdToPrintableBehavior::IdIsPropertyKey);
-     if (!keyBytes)
-         return;
- 
-     if (!reportScanStack) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL,
--                                   keyBytes.get(),
--                                   v.isUndefined() ? js_undefined_str : js_null_str);
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL,
-+                                 keyBytes.get(),
-+                                 v.isUndefined() ? js_undefined_str : js_null_str);
-         return;
-     }
- 
-     UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, v, nullptr);
-     if (!bytes)
-         return;
- 
-     if (strcmp(bytes.get(), js_undefined_str) == 0 || strcmp(bytes.get(), js_null_str) == 0) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL,
--                                   keyBytes.get(), bytes.get());
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL,
-+                                 keyBytes.get(), bytes.get());
-     } else if (v.isUndefined()) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL_EXPR,
--                                   bytes.get(), js_undefined_str, keyBytes.get());
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL_EXPR,
-+                                 bytes.get(), js_undefined_str, keyBytes.get());
-     } else {
-         MOZ_ASSERT(v.isNull());
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL_EXPR,
--                                   bytes.get(), js_null_str, keyBytes.get());
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL_EXPR,
-+                                 bytes.get(), js_null_str, keyBytes.get());
-     }
- }
- 
  void
  js::ReportMissingArg(JSContext* cx, HandleValue v, unsigned arg)
  {
@@ -481,7 +426,7 @@ diff --git a/js/src/vm/Printer.cpp b/js/src/vm/Printer.cpp
 diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
 --- a/js/src/vm/SelfHosting.cpp
 +++ b/js/src/vm/SelfHosting.cpp
-@@ -294,26 +294,26 @@ ThrowErrorWithType(JSContext* cx, JSExnT
+@@ -336,26 +336,26 @@ ThrowErrorWithType(JSContext* cx, JSExnT
  
      UniqueChars errorArgs[3];
      for (unsigned i = 1; i < 4 && i < args.length(); i++) {

+ 5 - 5
frg/work-js/mozilla-release/patches/mozilla-central_435010.patch → frg/work-js/mozilla-release/patches/1485066-13-64a1.patch

@@ -3,7 +3,7 @@
 # Date 1536135912 25200
 #      Wed Sep 05 01:25:12 2018 -0700
 # Node ID 44d8851437603d5684911c59e53d1254451cb4b3
-# Parent  eb37a9c0cff43121655fa7a8a42bf4ec171cf848
+# Parent  4c4f36d5dda3073e64f24419c09681117adacb21
 Bug 1485066 - Part 13: Use JS_ReportErrorNumberASCII when the error arguments are guaranteed to be ASCII characters. r=Waldo
 
 diff --git a/js/src/vm/EnvironmentObject.cpp b/js/src/vm/EnvironmentObject.cpp
@@ -55,7 +55,7 @@ diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
  /*
   * Define macros for an interpreter loop. Opcode dispatch may be either by a
   * switch statement or by indirect goto (aka a threaded interpreter), depending
-@@ -5377,18 +5377,18 @@ js::ReportRuntimeLexicalError(JSContext*
+@@ -5381,18 +5381,18 @@ js::ReportRuntimeLexicalError(JSContext*
  
      ReportRuntimeLexicalError(cx, errorNumber, name);
  }
@@ -76,7 +76,7 @@ diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
  {
      switch (kind) {
        case CheckIsObjectKind::IteratorNext:
-@@ -5462,22 +5462,22 @@ js::ThrowUninitializedThis(JSContext* cx
+@@ -5466,22 +5466,22 @@ js::ThrowUninitializedThis(JSContext* cx
          UniqueChars str;
          if (fun->explicitName()) {
              str = AtomToPrintableString(cx, fun->explicitName());
@@ -125,7 +125,7 @@ diff --git a/js/src/vm/JSAtom.h b/js/src/vm/JSAtom.h
 diff --git a/js/src/vm/UbiNodeCensus.cpp b/js/src/vm/UbiNodeCensus.cpp
 --- a/js/src/vm/UbiNodeCensus.cpp
 +++ b/js/src/vm/UbiNodeCensus.cpp
-@@ -1261,18 +1261,18 @@ ParseBreakdown(JSContext* cx, HandleValu
+@@ -1087,18 +1087,18 @@ ParseBreakdown(JSContext* cx, HandleValu
          return CountTypePtr(cx->new_<ByFilename>(std::move(thenType), std::move(noFilenameType)));
      }
  
@@ -145,4 +145,4 @@ diff --git a/js/src/vm/UbiNodeCensus.cpp b/js/src/vm/UbiNodeCensus.cpp
  //
  // { by: "coarseType",
  //   objects: { by: "objectClass" },
- //   other:   { by: "internalType" },
+ //   other:   { by: "internalType" }

+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_435011.patch → frg/work-js/mozilla-release/patches/1485066-14-64a1.patch


+ 9 - 9
frg/work-js/mozilla-release/patches/mozilla-central-push_434955.patch → frg/work-js/mozilla-release/patches/1485452-64a1.patch

@@ -3,7 +3,7 @@
 # Date 1536171454 -10800
 #      Wed Sep 05 21:17:34 2018 +0300
 # Node ID d3abd725b443c80f0d1316db156c446103b658f9
-# Parent  a0e69b970c12659b9ae787db8018ceedded2af68
+# Parent  4a205c142bb880d4d856dec332be460dce4e5c60
 Bug 1485452 - Remote IsPropertyIterator/IsLegacyIterator. r=jandem
 
 Reviewers: jandem
@@ -19,7 +19,7 @@ Differential Revision: https://phabricator.services.mozilla.com/D4955
 diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
 --- a/js/src/builtin/TestingFunctions.cpp
 +++ b/js/src/builtin/TestingFunctions.cpp
-@@ -4948,27 +4948,16 @@ IsConstructor(JSContext* cx, unsigned ar
+@@ -5036,27 +5036,16 @@ IsConstructor(JSContext* cx, unsigned ar
      if (args.length() < 1)
          args.rval().setBoolean(false);
      else
@@ -39,15 +39,15 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
 -}
 -
 -static bool
- SetTimeResolution(JSContext* cx, unsigned argc, Value* vp)
+ ScriptedCallerGlobal(JSContext* cx, unsigned argc, Value* vp)
  {
-    CallArgs args = CallArgsFromVp(argc, vp);
-    RootedObject callee(cx, &args.callee());
+     CallArgs args = CallArgsFromVp(argc, vp);
  
-    if (!args.requireAtLeast(cx, "setTimeResolution", 2))
-         return false;
- 
-@@ -5820,20 +5809,16 @@ gc::ZealModeHelpText),
+     RootedObject obj(cx, JS::GetScriptedCallerGlobal(cx));
+     if (!obj) {
+         args.rval().setNull();
+         return true;
+@@ -5889,20 +5878,16 @@ gc::ZealModeHelpText),
  "TimeSinceCreation()",
  "  Returns the time in milliseconds since process creation.\n"
  "  This uses a clock compatible with the profiler.\n"),

+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434956.patch → frg/work-js/mozilla-release/patches/1485460-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434677.patch → frg/work-js/mozilla-release/patches/1486125-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434812.patch → frg/work-js/mozilla-release/patches/1487327-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434931.patch → frg/work-js/mozilla-release/patches/1487329-1-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434932.patch → frg/work-js/mozilla-release/patches/1487329-2-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434622.patch → frg/work-js/mozilla-release/patches/1488173-64a1.patch


+ 10 - 10
frg/work-js/mozilla-release/patches/mozilla-central-push_434741.patch → frg/work-js/mozilla-release/patches/1488191-64a1.patch

@@ -3,7 +3,7 @@
 # Date 1535987140 25200
 #      Mon Sep 03 08:05:40 2018 -0700
 # Node ID e32a8fc346e197e24180dd046329dab4cfc1ff73
-# Parent  c3b29fcce16fed26eed17fc8e3910ae07bcca40d
+# Parent  1e7f52fdb22a23866671d5249d6eb182ed340d15
 Bug 1488191: Call into the VM only once to determine the TypedArray type for TypedArraySort. r=jandem
 
 diff --git a/js/src/builtin/SelfHostingDefines.h b/js/src/builtin/SelfHostingDefines.h
@@ -99,7 +99,7 @@ diff --git a/js/src/builtin/TypedArray.js b/js/src/builtin/TypedArray.js
 diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
 --- a/js/src/vm/SelfHosting.cpp
 +++ b/js/src/vm/SelfHosting.cpp
-@@ -1014,74 +1014,49 @@ intrinsic_SharedArrayBuffersMemorySame(J
+@@ -1028,74 +1028,50 @@ intrinsic_SharedArrayBuffersMemorySame(J
      }
  
      args.rval().setBoolean(lhs->as<SharedArrayBufferObject>().rawBufferObject() ==
@@ -135,7 +135,7 @@ diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
 +                  "TYPEDARRAY_KIND_UINT8CLAMPED doesn't match the scalar type");
 +
      JSObject* obj = &args[0].toObject();
--
+ 
 -    bool isArray = JS_GetArrayBufferViewType(obj) == type;
 -
 -    args.rval().setBoolean(isArray);
@@ -189,15 +189,15 @@ diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
 -}
 -
 -static bool
- intrinsic_IsPossiblyWrappedTypedArray(JSContext* cx, unsigned argc, Value* vp)
+ intrinsic_TypedArrayBuffer(JSContext* cx, unsigned argc, Value* vp)
  {
      CallArgs args = CallArgsFromVp(argc, vp);
      MOZ_ASSERT(args.length() == 1);
+     MOZ_ASSERT(TypedArrayObject::is(args[0]));
  
-     bool isTypedArray = false;
-     if (args[0].isObject()) {
-         JSObject* obj = CheckedUnwrap(&args[0].toObject());
-@@ -2540,23 +2515,17 @@ static const JSFunctionSpec intrinsic_fu
+     Rooted<TypedArrayObject*> tarray(cx, &args[0].toObject().as<TypedArrayObject>());
+     if (!TypedArrayObject::ensureHasBuffer(cx, tarray))
+@@ -2550,23 +2526,17 @@ static const JSFunctionSpec intrinsic_fu
            intrinsic_ArrayBufferByteLength<SharedArrayBufferObject>,     1,0),
      JS_FN("PossiblyWrappedSharedArrayBufferByteLength",
            intrinsic_PossiblyWrappedArrayBufferByteLength<SharedArrayBufferObject>, 1,0),
@@ -217,8 +217,8 @@ diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
      JS_INLINABLE_FN("IsTypedArray",
                      intrinsic_IsInstanceOfBuiltin<TypedArrayObject>,    1,0,
                      IntrinsicIsTypedArray),
-     JS_INLINABLE_FN("IsPossiblyWrappedTypedArray",intrinsic_IsPossiblyWrappedTypedArray,1,0,
+     JS_INLINABLE_FN("IsPossiblyWrappedTypedArray",
+                     intrinsic_IsPossiblyWrappedInstanceOfBuiltin<TypedArrayObject>, 1,0,
                      IntrinsicIsPossiblyWrappedTypedArray),
  
      JS_FN("TypedArrayBuffer",        intrinsic_TypedArrayBuffer,        1,0),
-     JS_FN("TypedArrayByteOffset",    intrinsic_TypedArrayByteOffset,    1,0),

+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434740.patch → frg/work-js/mozilla-release/patches/1488192-64a1.patch


+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434623.patch → frg/work-js/mozilla-release/patches/1488227-64a1.patch


+ 7 - 7
frg/work-js/mozilla-release/patches/mozilla-central-push_434824.patch → frg/work-js/mozilla-release/patches/1488461-64a1.patch

@@ -3,7 +3,7 @@
 # Date 1536143260 -3600
 #      Wed Sep 05 11:27:40 2018 +0100
 # Node ID d418daa826c5c2d5a86bd823f5378adb220a3e9e
-# Parent  ccd4dbac66cde136db3b188a962fbef0606b0db6
+# Parent  e98bbfa9a8d9fc6ea59f334af5f490549c4db42d
 Bug 1488461 - Clean up unnecessary casting in scope tracing code r=sfink
 
 diff --git a/js/src/gc/GCMarker.h b/js/src/gc/GCMarker.h
@@ -240,7 +240,7 @@ diff --git a/js/src/vm/Scope.h b/js/src/vm/Scope.h
      enum class Kind {
          Global,
          Argument,
-@@ -460,16 +461,17 @@ SizeOfData(uint32_t numBindings)
+@@ -449,16 +450,17 @@ SizeOfData(uint32_t numBindings)
  //
  // All kinds of LexicalScopes correspond to LexicalEnvironmentObjects on the
  // environment chain.
@@ -258,7 +258,7 @@ diff --git a/js/src/vm/Scope.h b/js/src/vm/Scope.h
      {
          // Bindings are sorted by kind in both frames and environments.
          //
-@@ -774,16 +776,17 @@ Scope::is<VarScope>() const
+@@ -763,16 +765,17 @@ Scope::is<VarScope>() const
  // NonSyntactic
  //   Corresponds to a non-GlobalObject created by the embedding on the
  //   environment chain. This distinction is important for optimizations.
@@ -272,11 +272,11 @@ diff --git a/js/src/vm/Scope.h b/js/src/vm/Scope.h
    public:
      // Data is public because it is created by the frontend. See
      // Parser<FullParseHandler>::newGlobalScopeData.
-     struct Data : public TopLevelScopeData
+     struct Data : BaseScopeData
      {
          // Bindings are sorted by kind.
          // `vars` includes top-level functions which is distinguished by a bit
-@@ -878,16 +881,17 @@ class WithScope : public Scope
+@@ -859,16 +862,17 @@ class WithScope : public Scope
  //   A sloppy eval. This is an empty scope, used only in the frontend, to
  //   detect redeclaration errors. It has no Environment. Any `var`s declared
  //   in the eval code are bound on the nearest enclosing var environment.
@@ -294,7 +294,7 @@ diff --git a/js/src/vm/Scope.h b/js/src/vm/Scope.h
      {
          // All bindings in an eval script are 'var' bindings. The implicit
          // lexical scope around the eval is present regardless of strictness
-@@ -1050,16 +1054,17 @@ class ModuleScope : public Scope
+@@ -1023,16 +1027,17 @@ class ModuleScope : public Scope
  
      static Shape* getEmptyEnvironmentShape(JSContext* cx);
  };
@@ -312,7 +312,7 @@ diff --git a/js/src/vm/Scope.h b/js/src/vm/Scope.h
          uint32_t memoriesStart = 0;
          uint32_t globalsStart = 0;
          uint32_t length = 0;
-@@ -1109,16 +1114,17 @@ class WasmInstanceScope : public Scope
+@@ -1082,16 +1087,17 @@ class WasmInstanceScope : public Scope
  
  // Scope corresponding to the wasm function. A WasmFunctionScope is used by
  // Debugger only, and not for wasm execution.

+ 0 - 0
frg/work-js/mozilla-release/patches/mozilla-central-push_434784.patch → frg/work-js/mozilla-release/patches/1488553-64a1.patch


File diff suppressed because it is too large
+ 117 - 229
frg/work-js/mozilla-release/patches/1488698-7-64a1.patch


File diff suppressed because it is too large
+ 327 - 467
frg/work-js/mozilla-release/patches/1488698-7-ORG-64a1.patch


+ 15 - 15
frg/work-js/mozilla-release/patches/1489477-2-64a1.patch

@@ -3,13 +3,13 @@
 # Date 1539279237 -3600
 #      Thu Oct 11 18:33:57 2018 +0100
 # Node ID f8b19c4105d2e0e78a5a2ffd8843c93c12af5c79
-# Parent  612f5de4f6dc6cf5404fd42d0dfc3b204eec04be
+# Parent  e4fbea404efef71f59736d8e3feb8f0ca7850e61
 Bug 1489477 - Stop modules from entraining the top-level JSScript r=sfink
 
 diff --git a/js/src/builtin/ModuleObject.cpp b/js/src/builtin/ModuleObject.cpp
 --- a/js/src/builtin/ModuleObject.cpp
 +++ b/js/src/builtin/ModuleObject.cpp
-@@ -954,28 +954,32 @@ AssertModuleScopesMatch(ModuleObject* mo
+@@ -944,28 +944,32 @@ AssertModuleScopesMatch(ModuleObject* mo
  void
  ModuleObject::fixEnvironmentsAfterCompartmentMerge()
  {
@@ -48,7 +48,7 @@ diff --git a/js/src/builtin/ModuleObject.cpp b/js/src/builtin/ModuleObject.cpp
      MOZ_ASSERT(status >= MODULE_STATUS_UNINSTANTIATED &&
                 status <= MODULE_STATUS_EVALUATED_ERROR);
  }
-@@ -1114,16 +1118,21 @@ ModuleObject::execute(JSContext* cx, Han
+@@ -1104,16 +1108,21 @@ ModuleObject::execute(JSContext* cx, Han
  {
  #ifdef DEBUG
      MOZ_ASSERT(self->status() == MODULE_STATUS_EVALUATING);
@@ -73,7 +73,7 @@ diff --git a/js/src/builtin/ModuleObject.cpp b/js/src/builtin/ModuleObject.cpp
 diff --git a/js/src/builtin/ModuleObject.h b/js/src/builtin/ModuleObject.h
 --- a/js/src/builtin/ModuleObject.h
 +++ b/js/src/builtin/ModuleObject.h
-@@ -292,16 +292,17 @@ class ModuleObject : public NativeObject
+@@ -293,16 +293,17 @@ class ModuleObject : public NativeObject
                                HandleArrayObject indiretExportEntries,
                                HandleArrayObject starExportEntries);
      static bool Freeze(JSContext* cx, HandleModuleObject self);
@@ -91,7 +91,7 @@ diff --git a/js/src/builtin/ModuleObject.h b/js/src/builtin/ModuleObject.h
      ModuleStatus status() const;
      bool hadEvaluationError() const;
      Value evaluationError() const;
-@@ -338,17 +339,16 @@ class ModuleObject : public NativeObject
+@@ -339,17 +340,16 @@ class ModuleObject : public NativeObject
                                                    HandleObject exports);
  
    private:
@@ -112,7 +112,7 @@ diff --git a/js/src/builtin/ModuleObject.h b/js/src/builtin/ModuleObject.h
 diff --git a/js/src/jsapi.h b/js/src/jsapi.h
 --- a/js/src/jsapi.h
 +++ b/js/src/jsapi.h
-@@ -3960,16 +3960,19 @@ GetRequestedModules(JSContext* cx, JS::H
+@@ -3034,16 +3034,19 @@ GetRequestedModules(JSContext* cx, JS::H
  
  extern JS_PUBLIC_API(JSString*)
  GetRequestedModuleSpecifier(JSContext* cx, JS::HandleValue requestedModuleObject);
@@ -191,7 +191,7 @@ diff --git a/js/src/shell/ModuleLoader.js b/js/src/shell/ModuleLoader.js
 diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 --- a/js/src/shell/js.cpp
 +++ b/js/src/shell/js.cpp
-@@ -171,16 +171,17 @@ enum JSShellExitCode {
+@@ -181,16 +181,17 @@ enum JSShellExitCode {
      EXITCODE_TIMEOUT            = 6
  };
  
@@ -209,7 +209,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
  /*
   * Note: This limit should match the stack limit set by the browser in
   *       js/xpconnect/src/XPCJSContext.cpp
-@@ -3005,17 +3006,17 @@ DisassembleToSprinter(JSContext* cx, uns
+@@ -3034,17 +3035,17 @@ DisassembleToSprinter(JSContext* cx, uns
                  return false;
          }
      } else {
@@ -228,7 +228,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
                  return false;
          }
      }
-@@ -4310,31 +4311,55 @@ CallModuleResolveHook(JSContext* cx, Han
+@@ -4341,31 +4342,55 @@ CallModuleResolveHook(JSContext* cx, Han
           JS_ReportErrorASCII(cx, "Module resolve hook did not return Module object");
           return nullptr;
      }
@@ -299,7 +299,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
      CallArgs args = CallArgsFromVp(argc, vp);
  
      ShellContext* sc = GetShellContext(cx);
-@@ -6134,17 +6159,21 @@ DumpScopeChain(JSContext* cx, unsigned a
+@@ -6297,17 +6322,21 @@ DumpScopeChain(JSContext* cx, unsigned a
      if (obj->is<JSFunction>()) {
          RootedFunction fun(cx, &obj->as<JSFunction>());
          if (!fun->isInterpreted()) {
@@ -322,7 +322,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
      return true;
  }
  
-@@ -6814,16 +6843,22 @@ static const JSFunctionSpecWithHelp shel
+@@ -6988,16 +7017,22 @@ static const JSFunctionSpecWithHelp shel
  "  module loader."),
  
      JS_FN_HELP("setModuleResolveHook", SetModuleResolveHook, 1, 0,
@@ -345,8 +345,8 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
      JS_FN_HELP("parse", Parse, 1, 0,
  "parse(code)",
  "  Parses a string, potentially throwing."),
-@@ -8291,18 +8326,19 @@ ProcessArgs(JSContext* cx, OptionParser*
-         sc->moduleLoadPath = UniqueChars(JS_EncodeString(cx, absolutePath));
+@@ -8557,18 +8592,19 @@ ProcessArgs(JSContext* cx, OptionParser*
+         sc->moduleLoadPath = JS_EncodeStringToLatin1(cx, absolutePath);
      } else {
          sc->moduleLoadPath = js::shell::GetCWD();
      }
@@ -367,7 +367,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
  
          if (fpArgno < ccArgno && fpArgno < mpArgno) {
              char* path = filePaths.front();
-@@ -9190,17 +9226,17 @@ main(int argc, char** argv, char** envp)
+@@ -9453,17 +9489,17 @@ main(int argc, char** argv, char** envp)
          JS_SetGCParameter(cx, JSGC_DYNAMIC_MARK_SLICE, 1);
          JS_SetGCParameter(cx, JSGC_SLICE_TIME_BUDGET, 10);
      }
@@ -389,7 +389,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 diff --git a/js/src/vm/Stack.cpp b/js/src/vm/Stack.cpp
 --- a/js/src/vm/Stack.cpp
 +++ b/js/src/vm/Stack.cpp
-@@ -146,21 +146,23 @@ AssertScopeMatchesEnvironment(Scope* sco
+@@ -148,21 +148,23 @@ AssertScopeMatchesEnvironment(Scope* sco
                  env = &env->as<LexicalEnvironmentObject>().enclosingEnvironment();
                  MOZ_ASSERT(env->is<GlobalObject>());
                  break;

+ 1 - 1
frg/work-js/mozilla-release/patches/1499140-1-64a1.patch

@@ -433,7 +433,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
  {
      MOZ_ASSERT(!cx->zone()->isAtomsZone());
      AssertHeapIsIdle();
-     CHECK_REQUEST(cx);
+     CHECK_THREAD(cx);
  
 diff --git a/js/src/jsapi.h b/js/src/jsapi.h
 --- a/js/src/jsapi.h

+ 7 - 7
frg/work-js/mozilla-release/patches/1504334-65a1.patch

@@ -2,7 +2,7 @@
 # User Andre Bargull <andre.bargull@gmail.com>
 # Date 1541193074 25200
 # Node ID 69b08ee5925dac595180a813dcf959929198699f
-# Parent  5a0697f4f911b8ef03ebdd31b93c724b71f65770
+# Parent  a495a7add3ff8c7e21c911f6fdd10b831a2f3dec
 Bug 1504334 - Let Intl.RelativeTimeFormat ride the trains.  r=jwalden, r=gandalf
 
 diff --git a/js/src/builtin/intl/IntlObject.cpp b/js/src/builtin/intl/IntlObject.cpp
@@ -19,14 +19,14 @@ diff --git a/js/src/builtin/intl/IntlObject.cpp b/js/src/builtin/intl/IntlObject
  #include "builtin/intl/PluralRules.h"
 +#include "builtin/intl/RelativeTimeFormat.h"
  #include "builtin/intl/ScopedICUObject.h"
- #include "js/AutoByteString.h"
+ #include "js/CharacterEncoding.h"
  #include "js/Class.h"
  #include "js/StableStringChars.h"
  #include "vm/GlobalObject.h"
  #include "vm/JSContext.h"
  #include "vm/JSObject.h"
  #include "vm/StringType.h"
-@@ -535,16 +536,20 @@ GlobalObject::initIntlObject(JSContext* 
+@@ -534,16 +535,20 @@ GlobalObject::initIntlObject(JSContext* 
          return false;
      RootedObject numberFormatProto(cx), numberFormat(cx);
      numberFormatProto = CreateNumberFormatPrototype(cx, intl, global, &numberFormat);
@@ -47,7 +47,7 @@ diff --git a/js/src/builtin/intl/IntlObject.cpp b/js/src/builtin/intl/IntlObject
          return false;
  
      // Now that the |Intl| object is successfully added, we can OOM-safely fill
-@@ -557,16 +562,17 @@ GlobalObject::initIntlObject(JSContext* 
+@@ -556,16 +561,17 @@ GlobalObject::initIntlObject(JSContext* 
      // |getPrototype(JSProto_*)|, but that has global-object-property-related
      // baggage we don't need or want, so we use one-off reserved slots.
      global->setReservedSlot(COLLATOR_PROTO, ObjectValue(*collatorProto));
@@ -259,7 +259,7 @@ diff --git a/js/src/builtin/intl/RelativeTimeFormat.js b/js/src/builtin/intl/Rel
 diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h
 --- a/js/src/jsfriendapi.h
 +++ b/js/src/jsfriendapi.h
-@@ -2974,22 +2974,16 @@ ToWindowIfWindowProxy(JSObject* obj);
+@@ -2884,22 +2884,16 @@ ToWindowIfWindowProxy(JSObject* obj);
  // if passed bad input. But the current behavior is entirely under-specified
  // and emphatically not shippable on the web, and it *must* be fixed before
  // this functionality can be exposed in the real world. (There are also some
@@ -285,7 +285,7 @@ diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h
 diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 --- a/js/src/shell/js.cpp
 +++ b/js/src/shell/js.cpp
-@@ -1099,19 +1099,16 @@ AddIntlExtras(JSContext* cx, unsigned ar
+@@ -1112,19 +1112,16 @@ AddIntlExtras(JSContext* cx, unsigned ar
      };
  
      if (!JS_DefineFunctions(cx, intl, funcs))
@@ -498,7 +498,7 @@ new file mode 100644
 diff --git a/js/src/vm/GlobalObject.h b/js/src/vm/GlobalObject.h
 --- a/js/src/vm/GlobalObject.h
 +++ b/js/src/vm/GlobalObject.h
-@@ -764,19 +764,16 @@ class GlobalObject : public NativeObject
+@@ -752,19 +752,16 @@ class GlobalObject : public NativeObject
  
      // Implemented in builtin/MapObject.cpp.
      static bool initMapIteratorProto(JSContext* cx, Handle<GlobalObject*> global);

+ 26 - 26
frg/work-js/mozilla-release/patches/1539780-70a1.patch

@@ -2,7 +2,7 @@
 # User Andre Bargull <andre.bargull@gmail.com>
 # Date 1565379799 0
 # Node ID 5967a3947ad0eeeecd97099e50655765259db28a
-# Parent  4c06bed49de09ed5ab0eb8e97584b5772aac85ae
+# Parent  73fe601517e4151678ee4cdd06b8dfde931c6a82
 Bug 1539780: Remove "--with-intl-api=build" build config option. r=jwalden
 
 There are about the same number of occurrences of "ENABLE_INTL_API" and "EXPOSE_INTL_API"
@@ -174,7 +174,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
  # include "unicode/uchar.h"
  # include "unicode/unorm2.h"
  #endif
-@@ -1071,17 +1071,17 @@ js::intl_toLocaleLowerCase(JSContext* cx
+@@ -1075,17 +1075,17 @@ js::intl_toLocaleLowerCase(JSContext* cx
      JSString* result = NewStringCopyN<CanGC>(cx, chars.begin(), size);
      if (!result)
          return false;
@@ -193,7 +193,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
  
  bool
  js::str_toLocaleLowerCase(JSContext* cx, unsigned argc, Value* vp)
-@@ -1112,17 +1112,17 @@ js::str_toLocaleLowerCase(JSContext* cx,
+@@ -1116,17 +1116,17 @@ js::str_toLocaleLowerCase(JSContext* cx,
      JSString* result = StringToLowerCase(cx, linear);
      if (!result)
          return false;
@@ -212,7 +212,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
      // special casing rules, so detect it inline.
      bool hasUpperCaseSpecialCasing = charCode == unicode::LATIN_SMALL_LETTER_SHARP_S;
      MOZ_ASSERT(hasUpperCaseSpecialCasing == unicode::ChangesWhenUpperCasedSpecialCasing(charCode));
-@@ -1469,17 +1469,17 @@ js::intl_toLocaleUpperCase(JSContext* cx
+@@ -1473,17 +1473,17 @@ js::intl_toLocaleUpperCase(JSContext* cx
      JSString* result = NewStringCopyN<CanGC>(cx, chars.begin(), size);
      if (!result)
          return false;
@@ -231,7 +231,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
  
  bool
  js::str_toLocaleUpperCase(JSContext* cx, unsigned argc, Value* vp)
-@@ -1510,19 +1510,19 @@ js::str_toLocaleUpperCase(JSContext* cx,
+@@ -1514,19 +1514,19 @@ js::str_toLocaleUpperCase(JSContext* cx,
      JSString* result = StringToUpperCase(cx, linear);
      if (!result)
          return false;
@@ -254,7 +254,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
  bool
  js::str_localeCompare(JSContext* cx, unsigned argc, Value* vp)
  {
-@@ -1547,19 +1547,19 @@ js::str_localeCompare(JSContext* cx, uns
+@@ -1551,19 +1551,19 @@ js::str_localeCompare(JSContext* cx, uns
      int32_t result;
      if (!CompareStrings(cx, str, thatStr, &result))
          return false;
@@ -277,7 +277,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
  {
      CallArgs args = CallArgsFromVp(argc, vp);
  
-@@ -1674,17 +1674,17 @@ js::str_normalize(JSContext* cx, unsigne
+@@ -1678,17 +1678,17 @@ js::str_normalize(JSContext* cx, unsigne
      if (!ns)
          return false;
  
@@ -296,7 +296,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
  
      RootedString str(cx);
      size_t i;
-@@ -3551,27 +3551,27 @@ static const JSFunctionSpec string_metho
+@@ -3555,27 +3555,27 @@ static const JSFunctionSpec string_metho
      JS_FN("includes",          str_includes,          1,0),
      JS_FN("indexOf",           str_indexOf,           1,0),
      JS_FN("lastIndexOf",       str_lastIndexOf,       1,0),
@@ -326,7 +326,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
      JS_SELF_HOSTED_FN("search", "String_search",      1,0),
      JS_SELF_HOSTED_FN("replace", "String_replace",    2,0),
      JS_SELF_HOSTED_FN("replaceAll", "String_replaceAll", 2, 0),
-@@ -3857,17 +3857,17 @@ static const JSFunctionSpec string_stati
+@@ -3861,17 +3861,17 @@ static const JSFunctionSpec string_stati
      JS_SELF_HOSTED_FN("lastIndexOf",     "String_static_lastIndexOf",   2,0),
      JS_SELF_HOSTED_FN("startsWith",      "String_static_startsWith",    2,0),
      JS_SELF_HOSTED_FN("endsWith",        "String_static_endsWith",      2,0),
@@ -504,7 +504,7 @@ diff --git a/js/src/builtin/String.js b/js/src/builtin/String.js
 diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
 --- a/js/src/builtin/TestingFunctions.cpp
 +++ b/js/src/builtin/TestingFunctions.cpp
-@@ -277,17 +277,17 @@ GetBuildConfiguration(JSContext* cx, uns
+@@ -293,17 +293,17 @@ GetBuildConfiguration(JSContext* cx, uns
  #ifdef ENABLE_BINARYDATA
      value = BooleanValue(true);
  #else
@@ -526,7 +526,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
 diff --git a/js/src/builtin/TypedArray.js b/js/src/builtin/TypedArray.js
 --- a/js/src/builtin/TypedArray.js
 +++ b/js/src/builtin/TypedArray.js
-@@ -1266,17 +1266,17 @@ function TypedArrayToLocaleString(locale
+@@ -1284,17 +1284,17 @@ function TypedArrayToLocaleString(locale
          return "";
  
      // Step 5.
@@ -545,7 +545,7 @@ diff --git a/js/src/builtin/TypedArray.js b/js/src/builtin/TypedArray.js
      // Step 3 (reordered).
      // We don't (yet?) implement locale-dependent separators.
      var separator = ",";
-@@ -1292,17 +1292,17 @@ function TypedArrayToLocaleString(locale
+@@ -1310,17 +1310,17 @@ function TypedArrayToLocaleString(locale
          // Step 9.c *should* be unreachable: typed array elements are numbers.
          // But bug 1079853 means |nextElement| *could* be |undefined|, if the
          // previous iteration's step 9.d or step 7 detached |array|'s buffer.
@@ -567,7 +567,7 @@ diff --git a/js/src/builtin/TypedArray.js b/js/src/builtin/TypedArray.js
 diff --git a/js/src/jsdate.cpp b/js/src/jsdate.cpp
 --- a/js/src/jsdate.cpp
 +++ b/js/src/jsdate.cpp
-@@ -2878,17 +2878,17 @@ FormatDate(JSContext* cx, double utcTime
+@@ -2924,17 +2924,17 @@ FormatDate(JSContext* cx, double utcTime
          if (!str)
              return false;
      }
@@ -586,7 +586,7 @@ diff --git a/js/src/jsdate.cpp b/js/src/jsdate.cpp
      char buf[100];
      if (!IsFinite(utcTime)) {
          strcpy(buf, js_InvalidDate_str);
-@@ -2992,17 +2992,17 @@ date_toLocaleTimeString_impl(JSContext* 
+@@ -3038,17 +3038,17 @@ date_toLocaleTimeString_impl(JSContext* 
  }
  
  static bool
@@ -605,7 +605,7 @@ diff --git a/js/src/jsdate.cpp b/js/src/jsdate.cpp
      return FormatDate(cx, args.thisv().toObject().as<DateObject>().UTCTime().toNumber(),
                        FormatSpec::Time, args.rval());
  }
-@@ -3148,17 +3148,17 @@ static const JSFunctionSpec date_methods
+@@ -3194,17 +3194,17 @@ static const JSFunctionSpec date_methods
      JS_FN("setUTCHours",         date_setUTCHours,        4,0),
      JS_FN("setMinutes",          date_setMinutes,         3,0),
      JS_FN("setUTCMinutes",       date_setUTCMinutes,      3,0),
@@ -627,14 +627,14 @@ diff --git a/js/src/jsdate.cpp b/js/src/jsdate.cpp
 diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
 --- a/js/src/jsnum.cpp
 +++ b/js/src/jsnum.cpp
-@@ -23,17 +23,17 @@
- #include <math.h>
+@@ -24,17 +24,17 @@
  #include <string.h>
  
  #include "jstypes.h"
  
  #include "builtin/String.h"
  #include "double-conversion/double-conversion.h"
+ #include "js/CharacterEncoding.h"
  #include "js/Conversions.h"
 -#if !EXPOSE_INTL_API
 +#if !ENABLE_INTL_API
@@ -646,7 +646,7 @@ diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
  #include "vm/BigIntType.h"
  #endif
  #include "vm/GlobalObject.h"
-@@ -773,17 +773,17 @@ num_toString_impl(JSContext* cx, const C
+@@ -774,17 +774,17 @@ num_toString_impl(JSContext* cx, const C
  
  bool
  js::num_toString(JSContext* cx, unsigned argc, Value* vp)
@@ -665,7 +665,7 @@ diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
      double d = Extract(args.thisv());
  
      RootedString str(cx, NumberToStringWithBase<CanGC>(cx, d, 10));
-@@ -906,17 +906,17 @@ num_toLocaleString_impl(JSContext* cx, c
+@@ -907,17 +907,17 @@ num_toLocaleString_impl(JSContext* cx, c
  }
  
  static bool
@@ -684,7 +684,7 @@ diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
      args.rval().setNumber(Extract(args.thisv()));
      return true;
  }
-@@ -1125,17 +1125,17 @@ num_toPrecision(JSContext* cx, unsigned 
+@@ -1126,17 +1126,17 @@ num_toPrecision(JSContext* cx, unsigned 
  {
      CallArgs args = CallArgsFromVp(argc, vp);
      return CallNonGenericMethod<IsNumber, num_toPrecision_impl>(cx, args);
@@ -703,7 +703,7 @@ diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
      JS_FN("toFixed",             num_toFixed,           1, 0),
      JS_FN("toExponential",       num_toExponential,     1, 0),
      JS_FN("toPrecision",         num_toPrecision,       1, 0),
-@@ -1156,20 +1156,20 @@ static const JSFunctionSpec number_stati
+@@ -1157,20 +1157,20 @@ static const JSFunctionSpec number_stati
      JS_SELF_HOSTED_FN("isSafeInteger", "Number_isSafeInteger", 1,0),
      JS_FS_END
  };
@@ -726,7 +726,7 @@ diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
      struct lconv* locale = localeconv();
      thousandsSeparator = locale->thousands_sep;
      decimalPoint = locale->decimal_point;
-@@ -1205,21 +1205,21 @@ js::InitRuntimeNumberState(JSRuntime* rt
+@@ -1206,21 +1206,21 @@ js::InitRuntimeNumberState(JSRuntime* rt
      storage += thousandsSeparatorSize;
  
      js_memcpy(storage, decimalPoint, decimalPointSize);
@@ -881,7 +881,7 @@ diff --git a/js/src/vm/Runtime.cpp b/js/src/vm/Runtime.cpp
      allowContentJS_(true),
      atoms_(nullptr),
      permanentAtomsDuringInit_(nullptr),
-@@ -313,17 +313,17 @@ JSRuntime::destroyRuntime()
+@@ -301,17 +301,17 @@ JSRuntime::destroyRuntime()
      MOZ_ASSERT(!hasHelperThreadZones());
  
      /*
@@ -900,7 +900,7 @@ diff --git a/js/src/vm/Runtime.cpp b/js/src/vm/Runtime.cpp
      js_delete(defaultFreeOp_.ref());
  
      defaultLocale = nullptr;
-@@ -547,17 +547,17 @@ JSRuntime::resetDefaultLocale()
+@@ -534,17 +534,17 @@ JSRuntime::resetDefaultLocale()
  const char*
  JSRuntime::getDefaultLocale()
  {
@@ -922,7 +922,7 @@ diff --git a/js/src/vm/Runtime.cpp b/js/src/vm/Runtime.cpp
 diff --git a/js/src/vm/Runtime.h b/js/src/vm/Runtime.h
 --- a/js/src/vm/Runtime.h
 +++ b/js/src/vm/Runtime.h
-@@ -640,17 +640,17 @@ struct JSRuntime : public js::MallocProv
+@@ -638,17 +638,17 @@ struct JSRuntime : public js::MallocProv
      js::WriteOnceData<js::FreeOp*> defaultFreeOp_;
  
    public:
@@ -944,7 +944,7 @@ diff --git a/js/src/vm/Runtime.h b/js/src/vm/Runtime.h
 diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
 --- a/js/src/vm/SelfHosting.cpp
 +++ b/js/src/vm/SelfHosting.cpp
-@@ -2404,17 +2404,17 @@ static const JSFunctionSpec intrinsic_fu
+@@ -2372,17 +2372,17 @@ static const JSFunctionSpec intrinsic_fu
      JS_INLINABLE_FN("std_String_toLowerCase",    str_toLowerCase,              0,0, StringToLowerCase),
      JS_INLINABLE_FN("std_String_toUpperCase",    str_toUpperCase,              0,0, StringToUpperCase),
  

+ 2 - 2
frg/work-js/mozilla-release/patches/1577869-70a1.patch

@@ -2,7 +2,7 @@
 # User Eric Rahm <erahm@mozilla.com>
 # Date 1567211752 0
 # Node ID 52721fabd4d12278444dccd78a90cbb2bbba3720
-# Parent  428636568fa495644be6977558faeae328ba8aa9
+# Parent  f83b274227030fa18b9e360f8697f28ddba8b30f
 Bug 1577869 - Remove using namespace std from js/ r=jwalden
 
 Differential Revision: https://phabricator.services.mozilla.com/D44253
@@ -11,7 +11,7 @@ diff --git a/js/src/ctypes/CTypes.cpp b/js/src/ctypes/CTypes.cpp
 --- a/js/src/ctypes/CTypes.cpp
 +++ b/js/src/ctypes/CTypes.cpp
 @@ -45,17 +45,17 @@
- #include "js/UniquePtr.h"
+ #include "js/Utility.h"
  #include "js/Vector.h"
  #include "util/Windows.h"
  #include "vm/JSContext.h"

+ 25 - 25
frg/work-js/mozilla-release/patches/1590907-5-72a1.patch

@@ -2,7 +2,7 @@
 # User Philip Chimento <philip.chimento@gmail.com>
 # Date 1574753135 0
 # Node ID bfdd5f34f2f4a11b84742400bb3130192c89d4fb
-# Parent  77fdcc6567a5efb3cc83a7f6b945f8d9865db4d1
+# Parent  749d2eaf3c75b896e51e119bd3501e30af3c5ca8
 Bug 1590907 - Make ENABLE_INTL_API and ENABLE_TYPED_OBJECTS into js-config macros. r=sfink,firefox-build-system-reviewers,mshal
 
 Whether ENABLE_INTL_API and ENABLE_TYPED_OBJECTS are defined, affects
@@ -257,7 +257,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
  #include "vm/BytecodeUtil.h"
  #include "vm/GlobalObject.h"
  #include "vm/Interpreter.h"
-@@ -733,17 +733,17 @@ js::SubstringKernel(JSContext* cx, Handl
+@@ -737,17 +737,17 @@ js::SubstringKernel(JSContext* cx, Handl
  static char16_t
  Final_Sigma(const char16_t* chars, size_t length, size_t index)
  {
@@ -276,7 +276,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
      for (size_t i = index; i > 0; ) {
          char16_t c = chars[--i];
          uint32_t codePoint = c;
-@@ -1071,17 +1071,17 @@ js::intl_toLocaleLowerCase(JSContext* cx
+@@ -1075,17 +1075,17 @@ js::intl_toLocaleLowerCase(JSContext* cx
      JSString* result = NewStringCopyN<CanGC>(cx, chars.begin(), size);
      if (!result)
          return false;
@@ -295,7 +295,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
  
  bool
  js::str_toLocaleLowerCase(JSContext* cx, unsigned argc, Value* vp)
-@@ -1112,17 +1112,17 @@ js::str_toLocaleLowerCase(JSContext* cx,
+@@ -1116,17 +1116,17 @@ js::str_toLocaleLowerCase(JSContext* cx,
      JSString* result = StringToLowerCase(cx, linear);
      if (!result)
          return false;
@@ -314,7 +314,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
      // special casing rules, so detect it inline.
      bool hasUpperCaseSpecialCasing = charCode == unicode::LATIN_SMALL_LETTER_SHARP_S;
      MOZ_ASSERT(hasUpperCaseSpecialCasing == unicode::ChangesWhenUpperCasedSpecialCasing(charCode));
-@@ -1469,17 +1469,17 @@ js::intl_toLocaleUpperCase(JSContext* cx
+@@ -1473,17 +1473,17 @@ js::intl_toLocaleUpperCase(JSContext* cx
      JSString* result = NewStringCopyN<CanGC>(cx, chars.begin(), size);
      if (!result)
          return false;
@@ -333,7 +333,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
  
  bool
  js::str_toLocaleUpperCase(JSContext* cx, unsigned argc, Value* vp)
-@@ -1510,19 +1510,19 @@ js::str_toLocaleUpperCase(JSContext* cx,
+@@ -1514,19 +1514,19 @@ js::str_toLocaleUpperCase(JSContext* cx,
      JSString* result = StringToUpperCase(cx, linear);
      if (!result)
          return false;
@@ -356,7 +356,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
  bool
  js::str_localeCompare(JSContext* cx, unsigned argc, Value* vp)
  {
-@@ -1547,19 +1547,19 @@ js::str_localeCompare(JSContext* cx, uns
+@@ -1551,19 +1551,19 @@ js::str_localeCompare(JSContext* cx, uns
      int32_t result;
      if (!CompareStrings(cx, str, thatStr, &result))
          return false;
@@ -379,7 +379,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
  {
      CallArgs args = CallArgsFromVp(argc, vp);
  
-@@ -1674,17 +1674,17 @@ js::str_normalize(JSContext* cx, unsigne
+@@ -1678,17 +1678,17 @@ js::str_normalize(JSContext* cx, unsigne
      if (!ns)
          return false;
  
@@ -398,7 +398,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
  
      RootedString str(cx);
      size_t i;
-@@ -3551,27 +3551,27 @@ static const JSFunctionSpec string_metho
+@@ -3555,27 +3555,27 @@ static const JSFunctionSpec string_metho
      JS_FN("includes",          str_includes,          1,0),
      JS_FN("indexOf",           str_indexOf,           1,0),
      JS_FN("lastIndexOf",       str_lastIndexOf,       1,0),
@@ -428,7 +428,7 @@ diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
      JS_SELF_HOSTED_FN("search", "String_search",      1,0),
      JS_SELF_HOSTED_FN("replace", "String_replace",    2,0),
      JS_SELF_HOSTED_FN("replaceAll", "String_replaceAll", 2, 0),
-@@ -3857,17 +3857,17 @@ static const JSFunctionSpec string_stati
+@@ -3861,17 +3861,17 @@ static const JSFunctionSpec string_stati
      JS_SELF_HOSTED_FN("lastIndexOf",     "String_static_lastIndexOf",   2,0),
      JS_SELF_HOSTED_FN("startsWith",      "String_static_startsWith",    2,0),
      JS_SELF_HOSTED_FN("endsWith",        "String_static_endsWith",      2,0),
@@ -654,7 +654,7 @@ new file mode 100644
 diff --git a/js/src/builtin/TypedArray.js b/js/src/builtin/TypedArray.js
 --- a/js/src/builtin/TypedArray.js
 +++ b/js/src/builtin/TypedArray.js
-@@ -1266,17 +1266,17 @@ function TypedArrayToLocaleString(locale
+@@ -1284,17 +1284,17 @@ function TypedArrayToLocaleString(locale
          return "";
  
      // Step 5.
@@ -673,7 +673,7 @@ diff --git a/js/src/builtin/TypedArray.js b/js/src/builtin/TypedArray.js
      // Step 3 (reordered).
      // We don't (yet?) implement locale-dependent separators.
      var separator = ",";
-@@ -1292,17 +1292,17 @@ function TypedArrayToLocaleString(locale
+@@ -1310,17 +1310,17 @@ function TypedArrayToLocaleString(locale
          // Step 9.c *should* be unreachable: typed array elements are numbers.
          // But bug 1079853 means |nextElement| *could* be |undefined|, if the
          // previous iteration's step 9.d or step 7 detached |array|'s buffer.
@@ -695,7 +695,7 @@ diff --git a/js/src/builtin/TypedArray.js b/js/src/builtin/TypedArray.js
 diff --git a/js/src/builtin/intl/CommonFunctions.cpp b/js/src/builtin/intl/CommonFunctions.cpp
 --- a/js/src/builtin/intl/CommonFunctions.cpp
 +++ b/js/src/builtin/intl/CommonFunctions.cpp
-@@ -85,17 +85,17 @@ js::intl::ReportInternalError(JSContext*
+@@ -114,17 +114,17 @@ js::intl::EncodeLocale(JSContext* cx, JS
  bool
  js::intl::GetAvailableLocales(JSContext* cx, CountAvailable countAvailable,
                                GetAvailable getAvailable, JS::MutableHandle<JS::Value> result)
@@ -997,14 +997,14 @@ diff --git a/js/src/jsdate.cpp b/js/src/jsdate.cpp
 diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
 --- a/js/src/jsnum.cpp
 +++ b/js/src/jsnum.cpp
-@@ -23,17 +23,17 @@
- #include <math.h>
+@@ -24,17 +24,17 @@
  #include <string.h>
  
  #include "jstypes.h"
  
  #include "builtin/String.h"
  #include "double-conversion/double-conversion.h"
+ #include "js/CharacterEncoding.h"
  #include "js/Conversions.h"
 -#if !ENABLE_INTL_API
 +#if !JS_HAS_INTL_API
@@ -1016,7 +1016,7 @@ diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
  #include "vm/BigIntType.h"
  #endif
  #include "vm/GlobalObject.h"
-@@ -773,17 +773,17 @@ num_toString_impl(JSContext* cx, const C
+@@ -774,17 +774,17 @@ num_toString_impl(JSContext* cx, const C
  
  bool
  js::num_toString(JSContext* cx, unsigned argc, Value* vp)
@@ -1035,7 +1035,7 @@ diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
      double d = Extract(args.thisv());
  
      RootedString str(cx, NumberToStringWithBase<CanGC>(cx, d, 10));
-@@ -906,17 +906,17 @@ num_toLocaleString_impl(JSContext* cx, c
+@@ -907,17 +907,17 @@ num_toLocaleString_impl(JSContext* cx, c
  }
  
  static bool
@@ -1054,7 +1054,7 @@ diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
      args.rval().setNumber(Extract(args.thisv()));
      return true;
  }
-@@ -1125,17 +1125,17 @@ num_toPrecision(JSContext* cx, unsigned 
+@@ -1126,17 +1126,17 @@ num_toPrecision(JSContext* cx, unsigned 
  {
      CallArgs args = CallArgsFromVp(argc, vp);
      return CallNonGenericMethod<IsNumber, num_toPrecision_impl>(cx, args);
@@ -1073,7 +1073,7 @@ diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
      JS_FN("toFixed",             num_toFixed,           1, 0),
      JS_FN("toExponential",       num_toExponential,     1, 0),
      JS_FN("toPrecision",         num_toPrecision,       1, 0),
-@@ -1156,20 +1156,20 @@ static const JSFunctionSpec number_stati
+@@ -1157,20 +1157,20 @@ static const JSFunctionSpec number_stati
      JS_SELF_HOSTED_FN("isSafeInteger", "Number_isSafeInteger", 1,0),
      JS_FS_END
  };
@@ -1096,7 +1096,7 @@ diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
      struct lconv* locale = localeconv();
      thousandsSeparator = locale->thousands_sep;
      decimalPoint = locale->decimal_point;
-@@ -1205,21 +1205,21 @@ js::InitRuntimeNumberState(JSRuntime* rt
+@@ -1206,21 +1206,21 @@ js::InitRuntimeNumberState(JSRuntime* rt
      storage += thousandsSeparatorSize;
  
      js_memcpy(storage, decimalPoint, decimalPointSize);
@@ -1145,7 +1145,7 @@ diff --git a/js/src/jsnum.h b/js/src/jsnum.h
 diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 --- a/js/src/shell/js.cpp
 +++ b/js/src/shell/js.cpp
-@@ -1083,17 +1083,17 @@ BindToAsyncStack(JSContext* cx, unsigned
+@@ -1088,17 +1088,17 @@ BindToAsyncStack(JSContext* cx, unsigned
          return false;
      SetFunctionNativeReserved(bound, 0, args[0]);
      SetFunctionNativeReserved(bound, 1, args[1]);
@@ -1164,7 +1164,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
          JS_ReportErrorASCII(cx, "addIntlExtras must be passed an object");
          return false;
      }
-@@ -1110,17 +1110,17 @@ AddIntlExtras(JSContext* cx, unsigned ar
+@@ -1115,17 +1115,17 @@ AddIntlExtras(JSContext* cx, unsigned ar
          return false;
  
      if (!js::AddMozDateTimeFormatConstructor(cx, intl))
@@ -1711,7 +1711,7 @@ diff --git a/js/src/vm/Runtime.cpp b/js/src/vm/Runtime.cpp
      js_delete(defaultFreeOp_.ref());
  
      defaultLocale = nullptr;
-@@ -535,17 +535,17 @@ JSRuntime::resetDefaultLocale()
+@@ -534,17 +534,17 @@ JSRuntime::resetDefaultLocale()
  const char*
  JSRuntime::getDefaultLocale()
  {
@@ -1733,7 +1733,7 @@ diff --git a/js/src/vm/Runtime.cpp b/js/src/vm/Runtime.cpp
 diff --git a/js/src/vm/Runtime.h b/js/src/vm/Runtime.h
 --- a/js/src/vm/Runtime.h
 +++ b/js/src/vm/Runtime.h
-@@ -640,17 +640,17 @@ struct JSRuntime : public js::MallocProv
+@@ -638,17 +638,17 @@ struct JSRuntime : public js::MallocProv
      js::WriteOnceData<js::FreeOp*> defaultFreeOp_;
  
    public:
@@ -1755,7 +1755,7 @@ diff --git a/js/src/vm/Runtime.h b/js/src/vm/Runtime.h
 diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
 --- a/js/src/vm/SelfHosting.cpp
 +++ b/js/src/vm/SelfHosting.cpp
-@@ -2405,17 +2405,17 @@ static const JSFunctionSpec intrinsic_fu
+@@ -2372,17 +2372,17 @@ static const JSFunctionSpec intrinsic_fu
      JS_INLINABLE_FN("std_String_toLowerCase",    str_toLowerCase,              0,0, StringToLowerCase),
      JS_INLINABLE_FN("std_String_toUpperCase",    str_toUpperCase,              0,0, StringToUpperCase),
  

+ 9 - 9
frg/work-js/mozilla-release/patches/mozilla-central-push_434817.patch → frg/work-js/mozilla-release/patches/722345-1-64a1.patch

@@ -3,7 +3,7 @@
 # Date 1535440757 -7200
 #      Tue Aug 28 09:19:17 2018 +0200
 # Node ID 6f17ffaad886eee469bd02aa97b359c61dde8eff
-# Parent  15812ad59a9019fcf40af44bff598007c7e1bb0e
+# Parent  0ad1c8f587f54d48d210420b4504aa6f55e2f64b
 Bug 722345 part 1 - Remove now unused activity callback API. r=luke
 
 Differential Revision: https://phabricator.services.mozilla.com/D4422
@@ -46,7 +46,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
 --- a/js/src/jsfriendapi.cpp
 +++ b/js/src/jsfriendapi.cpp
-@@ -1264,23 +1264,16 @@ js::DumpHeap(JSContext* cx, FILE* fp, js
+@@ -1269,23 +1269,16 @@ js::DumpHeap(JSContext* cx, FILE* fp, js
                             DumpHeapVisitRealm,
                             DumpHeapVisitArena,
                             DumpHeapVisitCell);
@@ -62,18 +62,18 @@ diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
 -}
 -
 -JS_FRIEND_API(void)
- JS::NotifyGCRootsRemoved(JSContext* cx)
+ JS::NotifyDidPaint(JSContext* cx)
  {
-     cx->runtime()->gc.notifyRootsRemoved();
+     cx->runtime()->gc.notifyDidPaint();
  }
  
- JS_FRIEND_API(JS::Realm*)
- js::GetAnyRealmInZone(JS::Zone* zone)
+ JS_FRIEND_API(void)
+ JS::NotifyGCRootsRemoved(JSContext* cx)
  {
 diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h
 --- a/js/src/jsfriendapi.h
 +++ b/js/src/jsfriendapi.h
-@@ -1156,27 +1156,16 @@ GetPCCountScriptContents(JSContext* cx, 
+@@ -1157,27 +1157,16 @@ GetPCCountScriptContents(JSContext* cx, 
   * content within the buffer would be set to the length out-param.
   *
   * In case of out-of-memory, this function returns nullptr and does not set any
@@ -104,7 +104,7 @@ diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h
 diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
 --- a/js/src/vm/JSContext.cpp
 +++ b/js/src/vm/JSContext.cpp
-@@ -1264,18 +1264,16 @@ JSContext::JSContext(JSRuntime* runtime,
+@@ -1211,18 +1211,16 @@ JSContext::JSContext(JSRuntime* runtime,
      options_(options),
      freeLists_(nullptr),
      jitActivation(nullptr),
@@ -150,7 +150,7 @@ diff --git a/js/src/vm/JSContext.h b/js/src/vm/JSContext.h
 diff --git a/js/src/vm/Runtime.cpp b/js/src/vm/Runtime.cpp
 --- a/js/src/vm/Runtime.cpp
 +++ b/js/src/vm/Runtime.cpp
-@@ -567,34 +567,16 @@ JSRuntime::getDefaultLocale()
+@@ -556,34 +556,16 @@ JSRuntime::getDefaultLocale()
  }
  
  void

File diff suppressed because it is too large
+ 142 - 128
frg/work-js/mozilla-release/patches/722345-2-64a1.patch


+ 103 - 94
frg/work-js/mozilla-release/patches/mozilla-central-push_434819.patch → frg/work-js/mozilla-release/patches/722345-3-64a1.patch

@@ -3,7 +3,7 @@
 # Date 1535442810 -7200
 #      Tue Aug 28 09:53:30 2018 +0200
 # Node ID e951ad8147a7f4e05c27af9d5d618979f861e01a
-# Parent  8542dc7212b42c892f8643d596c6e6ae64e3f0ed
+# Parent  143072b218e07b7789a6ae9d0d9607d45550fc09
 Bug 722345 part 3 - Remove request API. r=luke
 
 Differential Revision: https://phabricator.services.mozilla.com/D4424
@@ -64,12 +64,12 @@ diff --git a/dom/base/WindowDestroyedEvent.cpp b/dom/base/WindowDestroyedEvent.c
  #include "nsIAppStartup.h"
  #include "nsToolkitCompsCID.h"
  #include "nsCOMPtr.h"
- #include "nsContentUtils.h"
  
-diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp
---- a/dom/base/nsGlobalWindowInner.cpp
-+++ b/dom/base/nsGlobalWindowInner.cpp
-@@ -64,17 +64,17 @@
+ namespace mozilla {
+diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp
+--- a/dom/base/nsGlobalWindow.cpp
++++ b/dom/base/nsGlobalWindow.cpp
+@@ -63,17 +63,17 @@
  #include "nsNetUtil.h"
  #include "nsVariant.h"
  #include "nsPrintfCString.h"
@@ -83,37 +83,15 @@ diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp
  #include "js/Wrapper.h"
  #include "nsCharSeparatedTokenizer.h"
  #include "nsReadableUtils.h"
+ #include "nsDOMClassInfo.h"
  #include "nsJSEnvironment.h"
  #include "mozilla/dom/ScriptSettings.h"
  #include "mozilla/Preferences.h"
  #include "mozilla/Likely.h"
- #include "mozilla/Sprintf.h"
-diff --git a/dom/base/nsGlobalWindowOuter.cpp b/dom/base/nsGlobalWindowOuter.cpp
---- a/dom/base/nsGlobalWindowOuter.cpp
-+++ b/dom/base/nsGlobalWindowOuter.cpp
-@@ -61,17 +61,17 @@
- #include "nsVariant.h"
- #include "nsPrintfCString.h"
- #include "mozilla/intl/LocaleService.h"
- #include "WindowDestroyedEvent.h"
- #include "nsDocShellLoadInfo.h"
- 
- // Helper Classes
- #include "nsJSUtils.h"
--#include "jsapi.h"              // for JSAutoRequest
-+#include "jsapi.h"
- #include "js/Wrapper.h"
- #include "nsCharSeparatedTokenizer.h"
- #include "nsReadableUtils.h"
- #include "nsJSEnvironment.h"
- #include "mozilla/dom/ScriptSettings.h"
- #include "mozilla/Preferences.h"
- #include "mozilla/Likely.h"
- #include "mozilla/Sprintf.h"
 diff --git a/dom/indexedDB/IDBObjectStore.cpp b/dom/indexedDB/IDBObjectStore.cpp
 --- a/dom/indexedDB/IDBObjectStore.cpp
 +++ b/dom/indexedDB/IDBObjectStore.cpp
-@@ -1145,18 +1145,16 @@ IDBObjectStore::DeserializeValue(JSConte
+@@ -1144,18 +1144,16 @@ IDBObjectStore::DeserializeValue(JSConte
  
    if (!aCloneReadInfo.mData.Size()) {
      aValue.setUndefined();
@@ -135,7 +113,7 @@ diff --git a/dom/indexedDB/IDBObjectStore.cpp b/dom/indexedDB/IDBObjectStore.cpp
 diff --git a/dom/script/ScriptSettings.cpp b/dom/script/ScriptSettings.cpp
 --- a/dom/script/ScriptSettings.cpp
 +++ b/dom/script/ScriptSettings.cpp
-@@ -317,21 +317,16 @@ AutoJSAPI::~AutoJSAPI()
+@@ -326,21 +326,16 @@ AutoJSAPI::~AutoJSAPI()
    }
  
    ReportException();
@@ -157,7 +135,7 @@ diff --git a/dom/script/ScriptSettings.cpp b/dom/script/ScriptSettings.cpp
  
  void
  AutoJSAPI::InitInternal(nsIGlobalObject* aGlobalObject, JSObject* aGlobal,
-@@ -344,22 +339,16 @@ AutoJSAPI::InitInternal(nsIGlobalObject*
+@@ -353,22 +348,16 @@ AutoJSAPI::InitInternal(nsIGlobalObject*
    MOZ_ASSERT_IF(aGlobalObject, aGlobalObject->GetGlobalJSObject() == aGlobal);
  #ifdef DEBUG
    bool haveException = JS_IsExceptionPending(aCx);
@@ -201,7 +179,7 @@ diff --git a/dom/script/ScriptSettings.h b/dom/script/ScriptSettings.h
   *   effectively corresponds to having a non-null cx on the stack.
   *
   * In situations where the consumer expects to run script, AutoEntryScript
-@@ -290,17 +289,16 @@ public:
+@@ -289,17 +288,16 @@ public:
      JS_ClearPendingException(cx());
    }
  
@@ -222,8 +200,8 @@ diff --git a/dom/script/ScriptSettings.h b/dom/script/ScriptSettings.h
 diff --git a/dom/workers/RuntimeService.cpp b/dom/workers/RuntimeService.cpp
 --- a/dom/workers/RuntimeService.cpp
 +++ b/dom/workers/RuntimeService.cpp
-@@ -2751,22 +2751,19 @@ WorkerThreadPrimaryRunnable::Run()
-       WorkerErrorReport::CreateAndDispatchGenericErrorRunnableToParent(mWorkerPrivate);
+@@ -2906,22 +2906,19 @@ WorkerThreadPrimaryRunnable::Run()
+       NS_ERROR("Failed to create context!");
        return NS_ERROR_FAILURE;
      }
  
@@ -246,31 +224,62 @@ diff --git a/dom/workers/RuntimeService.cpp b/dom/workers/RuntimeService.cpp
        PROFILER_CLEAR_JS_CONTEXT();
      }
  
-diff --git a/dom/worklet/Worklet.cpp b/dom/worklet/Worklet.cpp
---- a/dom/worklet/Worklet.cpp
-+++ b/dom/worklet/Worklet.cpp
-@@ -377,17 +377,16 @@ void
- ExecutionRunnable::RunOnWorkletThread()
- {
-   WorkletThread::AssertIsOnWorkletThread();
- 
-   WorkletThread* workletThread = WorkletThread::Get();
-   MOZ_ASSERT(workletThread);
- 
-   JSContext* cx = workletThread->GetJSContext();
--  JSAutoRequest areq(cx);
- 
-   AutoJSAPI jsapi;
-   jsapi.Init();
- 
-   RefPtr<WorkletGlobalScope> globalScope =
-     Worklet::CreateGlobalScope(jsapi.cx(), mWorkletType);
-   MOZ_ASSERT(globalScope);
- 
+diff --git a/dom/worklet/Worklet.cpp.1461292.later b/dom/worklet/Worklet.cpp.1461292.later
+deleted file mode 100644
+--- a/dom/worklet/Worklet.cpp.1461292.later
++++ /dev/null
+@@ -1,22 +0,0 @@
+---- Worklet.cpp
+-+++ Worklet.cpp
+-@@ -372,17 +372,17 @@ void
+- ExecutionRunnable::RunOnWorkletThread()
+- {
+-   WorkletThread::AssertIsOnWorkletThread();
+- 
+-   WorkletThread* workletThread = WorkletThread::Get();
+-   MOZ_ASSERT(workletThread);
+- 
+-   JSContext* cx = workletThread->GetJSContext();
+--  JSAutoRequest ar(cx);
+-+  JSAutoRequest areq(cx);
+- 
+-   AutoJSAPI jsapi;
+-   jsapi.Init();
+- 
+-   RefPtr<WorkletGlobalScope> globalScope =
+-     Worklet::CreateGlobalScope(jsapi.cx(), mWorkletType);
+-   MOZ_ASSERT(globalScope);
+- 
+-
+diff --git a/dom/worklet/Worklet.cpp.722345.later b/dom/worklet/Worklet.cpp.722345.later
+new file mode 100644
+--- /dev/null
++++ b/dom/worklet/Worklet.cpp.722345.later
+@@ -0,0 +1,20 @@
++--- Worklet.cpp
+++++ Worklet.cpp
++@@ -377,17 +377,16 @@ void
++ ExecutionRunnable::RunOnWorkletThread()
++ {
++   WorkletThread::AssertIsOnWorkletThread();
++ 
++   WorkletThread* workletThread = WorkletThread::Get();
++   MOZ_ASSERT(workletThread);
++ 
++   JSContext* cx = workletThread->GetJSContext();
++-  JSAutoRequest areq(cx);
++ 
++   AutoJSAPI jsapi;
++   jsapi.Init();
++ 
++   RefPtr<WorkletGlobalScope> globalScope =
++     Worklet::CreateGlobalScope(jsapi.cx(), mWorkletType);
++   MOZ_ASSERT(globalScope);
++ 
 diff --git a/dom/xbl/nsXBLProtoImpl.cpp b/dom/xbl/nsXBLProtoImpl.cpp
 --- a/dom/xbl/nsXBLProtoImpl.cpp
 +++ b/dom/xbl/nsXBLProtoImpl.cpp
-@@ -329,17 +329,16 @@ nsXBLProtoImpl::ResolveAllFields(JSConte
+@@ -328,17 +328,16 @@ nsXBLProtoImpl::ResolveAllFields(JSConte
    }
  
    return true;
@@ -291,9 +300,9 @@ diff --git a/dom/xbl/nsXBLProtoImpl.cpp b/dom/xbl/nsXBLProtoImpl.cpp
 diff --git a/dom/xhr/XMLHttpRequestWorker.cpp b/dom/xhr/XMLHttpRequestWorker.cpp
 --- a/dom/xhr/XMLHttpRequestWorker.cpp
 +++ b/dom/xhr/XMLHttpRequestWorker.cpp
-@@ -997,17 +997,16 @@ Proxy::HandleEvent(Event* aEvent)
-   if (mInOpen && type.EqualsASCII(sEventStrings[STRING_readystatechange])) {
-     if (mXHR->ReadyState() == 1) {
+@@ -1008,17 +1008,16 @@ Proxy::HandleEvent(nsIDOMEvent* aEvent)
+     if (NS_SUCCEEDED(mXHR->GetReadyState(&readyState)) &&
+         readyState == nsIXMLHttpRequest::OPENED) {
        mInnerEventStreamId++;
      }
    }
@@ -309,28 +318,28 @@ diff --git a/dom/xhr/XMLHttpRequestWorker.cpp b/dom/xhr/XMLHttpRequestWorker.cpp
  
      JS::Rooted<JSObject*> scope(cx, &value.toObject());
  
-@@ -1441,17 +1440,16 @@ OpenRunnable::MainThreadRunInternal()
+@@ -1450,17 +1449,16 @@ OpenRunnable::MainThreadRunInternal()
  
  void
  SendRunnable::RunOnMainThread(ErrorResult& aRv)
  {
-   Nullable<DocumentOrBlobOrArrayBufferViewOrArrayBufferOrFormDataOrURLSearchParamsOrUSVString> payload;
+   nsCOMPtr<nsIVariant> variant;
  
    if (HasData()) {
      AutoSafeJSContext cx;
 -    JSAutoRequest ar(cx);
  
+     nsIXPConnect* xpc = nsContentUtils::XPConnect();
+     MOZ_ASSERT(xpc);
+ 
      JS::Rooted<JSObject*> globalObject(cx, JS::CurrentGlobalOrNull(cx));
      if (NS_WARN_IF(!globalObject)) {
        aRv.Throw(NS_ERROR_FAILURE);
        return;
-     }
- 
-     nsCOMPtr<nsIGlobalObject> parent = xpc::NativeGlobal(globalObject);
 diff --git a/js/rust/build.rs b/js/rust/build.rs
 --- a/js/rust/build.rs
 +++ b/js/rust/build.rs
-@@ -302,31 +302,29 @@ const WHITELIST_FUNCTIONS: &'static [&'s
+@@ -301,31 +301,29 @@ const WHITELIST_FUNCTIONS: &'static [&'s
      "JS_HasProperty",
      "JS_HasPropertyById",
      "JS::HeapObjectPostBarrier",
@@ -574,7 +583,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
          return false;
  #endif
  
-@@ -1587,17 +1545,17 @@ SetNativeStackQuotaAndLimit(JSContext* c
+@@ -1561,17 +1519,17 @@ SetNativeStackQuotaAndLimit(JSContext* c
      }
  #endif
  }
@@ -596,7 +605,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 diff --git a/js/src/jsapi.h b/js/src/jsapi.h
 --- a/js/src/jsapi.h
 +++ b/js/src/jsapi.h
-@@ -463,56 +463,25 @@ JS_SetContextPrivate(JSContext* cx, void
+@@ -460,56 +460,25 @@ JS_SetContextPrivate(JSContext* cx, void
  
  extern JS_PUBLIC_API(JSRuntime*)
  JS_GetParentRuntime(JSContext* cx);
@@ -656,7 +665,7 @@ diff --git a/js/src/jsapi.h b/js/src/jsapi.h
 diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 --- a/js/src/shell/js.cpp
 +++ b/js/src/shell/js.cpp
-@@ -3644,18 +3644,16 @@ WorkerMain(WorkerInput* input)
+@@ -3597,18 +3597,16 @@ WorkerMain(WorkerInput* input)
      js::UseInternalJobQueues(cx);
  
      if (!JS::InitSelfHostedCode(cx))
@@ -667,15 +676,15 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
      do {
 -        JSAutoRequest areq(cx);
 -
-         JS::RealmOptions compartmentOptions;
-         SetStandardRealmOptions(compartmentOptions);
+         JS::RealmOptions realmOptions;
+         SetStandardRealmOptions(realmOptions);
  
-         RootedObject global(cx, NewGlobalObject(cx, compartmentOptions, nullptr));
+         RootedObject global(cx, NewGlobalObject(cx, realmOptions, nullptr));
          if (!global)
              break;
  
          JSAutoRealm ar(cx, global);
-@@ -9469,18 +9467,16 @@ Shell(JSContext* cx, OptionParser* op, c
+@@ -8946,18 +8944,16 @@ Shell(JSContext* cx, OptionParser* op, c
      Maybe<JS::AutoDisableGenerationalGC> noggc;
      if (op->getBoolOption("no-ggc"))
          noggc.emplace(cx);
@@ -717,7 +726,7 @@ diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
  
      FreeJobQueueHandling(cx);
  
-@@ -1264,17 +1261,16 @@ JSContext::JSContext(JSRuntime* runtime,
+@@ -1211,17 +1208,16 @@ JSContext::JSContext(JSRuntime* runtime,
      options_(options),
      freeLists_(nullptr),
      jitActivation(nullptr),
@@ -735,7 +744,7 @@ diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
      simulator_(nullptr),
  #endif
  #ifdef JS_TRACE_LOGGING
-@@ -1311,17 +1307,16 @@ JSContext::JSContext(JSRuntime* runtime,
+@@ -1258,17 +1254,16 @@ JSContext::JSContext(JSRuntime* runtime,
      reportGranularity(JS_DEFAULT_JITREPORT_GRANULARITY),
      resolvingList(nullptr),
  #ifdef DEBUG
@@ -776,7 +785,7 @@ diff --git a/js/src/vm/JSContext.h b/js/src/vm/JSContext.h
  #ifdef JS_SIMULATOR
    private:
      js::ThreadData<js::jit::Simulator*> simulator_;
-@@ -702,19 +699,16 @@ struct JSContext : public JS::RootingCon
+@@ -700,19 +697,16 @@ struct JSContext : public JS::RootingCon
      JS::ContextOptions& options() {
          return options_.ref();
      }
@@ -811,16 +820,16 @@ diff --git a/js/src/vm/Runtime.cpp b/js/src/vm/Runtime.cpp
 -    MOZ_ASSERT(cx->requestDepth >= 1);
      MOZ_ASSERT(!cx->zone()->isAtomsZone());
  
-     // Interrupts can occur at different points between recording and replay,
-     // so no recorded behaviors should occur while handling an interrupt.
-     // Additionally, returning false here will change subsequent behavior, so
-     // such an event cannot occur during recording or replay without
-     // invalidating the recording.
-     mozilla::recordreplay::AutoDisallowThreadEvents d;
+     cx->runtime()->gc.gcIfRequested();
+ 
+     // A worker thread may have requested an interrupt after finishing an Ion
+     // compilation.
+     jit::AttachFinishedCompilations(cx);
+ 
 diff --git a/js/src/vm/TypeInference.cpp b/js/src/vm/TypeInference.cpp
 --- a/js/src/vm/TypeInference.cpp
 +++ b/js/src/vm/TypeInference.cpp
-@@ -2673,17 +2673,16 @@ js::ReportMagicWordFailure(uintptr_t act
+@@ -2669,17 +2669,16 @@ js::ReportMagicWordFailure(uintptr_t act
  }
  #endif
  
@@ -864,8 +873,8 @@ diff --git a/js/xpconnect/src/XPCCallContext.cpp b/js/xpconnect/src/XPCCallConte
 diff --git a/js/xpconnect/src/XPCJSRuntime.cpp b/js/xpconnect/src/XPCJSRuntime.cpp
 --- a/js/xpconnect/src/XPCJSRuntime.cpp
 +++ b/js/xpconnect/src/XPCJSRuntime.cpp
-@@ -3009,18 +3009,16 @@ XPCJSRuntime::Initialize(JSContext* cx)
-     JS::ubi::SetConstructUbiNodeForDOMObjectCallback(cx, &ConstructUbiNode);
+@@ -3002,18 +3002,16 @@ XPCJSRuntime::Initialize(JSContext* cx)
+     mozilla::RegisterJSSizeOfTab(JSSizeOfTab);
  
      xpc_LocalizeRuntime(JS_GetRuntime(cx));
  }
@@ -883,8 +892,8 @@ diff --git a/js/xpconnect/src/XPCJSRuntime.cpp b/js/xpconnect/src/XPCJSRuntime.c
              if (!str) {
                  mStrIDs[0] = JSID_VOID;
                  return false;
-@@ -3222,17 +3220,16 @@ XPCJSRuntime::GetUAWidgetScope(JSContext
-     return scope;
+@@ -3178,17 +3176,16 @@ XPCJSRuntime::RemoveGCCallback(xpcGCCall
+     }
  }
  
  void
@@ -904,9 +913,9 @@ diff --git a/js/xpconnect/src/XPCJSRuntime.cpp b/js/xpconnect/src/XPCJSRuntime.c
 diff --git a/js/xpconnect/src/XPCWrappedJSClass.cpp b/js/xpconnect/src/XPCWrappedJSClass.cpp
 --- a/js/xpconnect/src/XPCWrappedJSClass.cpp
 +++ b/js/xpconnect/src/XPCWrappedJSClass.cpp
-@@ -40,17 +40,16 @@ bool AutoScriptEvaluate::StartEvaluating
+@@ -39,17 +39,16 @@ bool AutoScriptEvaluate::StartEvaluating
  {
-     MOZ_ASSERT(!mEvaluated, "AutoScriptEvaluate::Evaluate should only be called once");
+     NS_PRECONDITION(!mEvaluated, "AutoScriptEvaluate::Evaluate should only be called once");
  
      if (!mJSContext)
          return true;
@@ -922,7 +931,7 @@ diff --git a/js/xpconnect/src/XPCWrappedJSClass.cpp b/js/xpconnect/src/XPCWrappe
      // http://bugzilla.mozilla.org/show_bug.cgi?id=88130 but presumably could
      // show up in any situation where a script calls into a wrapped js component
      // on the same context, while the context has a nonzero exception state.
-@@ -59,18 +58,16 @@ bool AutoScriptEvaluate::StartEvaluating
+@@ -58,18 +57,16 @@ bool AutoScriptEvaluate::StartEvaluating
      return true;
  }
  
@@ -944,7 +953,7 @@ diff --git a/js/xpconnect/src/XPCWrappedJSClass.cpp b/js/xpconnect/src/XPCWrappe
 diff --git a/js/xpconnect/src/xpcprivate.h b/js/xpconnect/src/xpcprivate.h
 --- a/js/xpconnect/src/xpcprivate.h
 +++ b/js/xpconnect/src/xpcprivate.h
-@@ -767,17 +767,16 @@ private:
+@@ -801,17 +801,16 @@ private:
  
  #ifdef DEBUG
  inline void CHECK_STATE(int s) const {MOZ_ASSERT(mState >= s, "bad state");}
@@ -965,7 +974,7 @@ diff --git a/js/xpconnect/src/xpcprivate.h b/js/xpconnect/src/xpcprivate.h
 diff --git a/netwerk/base/ProxyAutoConfig.cpp b/netwerk/base/ProxyAutoConfig.cpp
 --- a/netwerk/base/ProxyAutoConfig.cpp
 +++ b/netwerk/base/ProxyAutoConfig.cpp
-@@ -657,18 +657,16 @@ private:
+@@ -647,18 +647,16 @@ private:
      JS_SetNativeStackQuota(mContext, 128 * sizeof(size_t) * 1024);
  
      JS::SetWarningReporter(mContext, PACWarningReporter);
@@ -984,7 +993,7 @@ diff --git a/netwerk/base/ProxyAutoConfig.cpp b/netwerk/base/ProxyAutoConfig.cpp
        JS_ClearPendingException(mContext);
        return NS_ERROR_OUT_OF_MEMORY;
      }
-@@ -745,17 +743,16 @@ ProxyAutoConfig::SetupJS()
+@@ -733,17 +731,16 @@ ProxyAutoConfig::SetupJS()
  
    NS_GetCurrentThread()->SetCanInvokeJS(true);
  
@@ -1002,7 +1011,7 @@ diff --git a/netwerk/base/ProxyAutoConfig.cpp b/netwerk/base/ProxyAutoConfig.cpp
    // use nsIURI scheme methods
    bool isDataURI = nsDependentCSubstring(mPACURI, 0, 5).LowerCaseEqualsASCII("data:", 5);
  
-@@ -805,17 +802,16 @@ ProxyAutoConfig::GetProxyForURI(const ns
+@@ -793,17 +790,16 @@ ProxyAutoConfig::GetProxyForURI(const ns
  {
    if (mJSNeedsSetup)
      SetupJS();

+ 8 - 8
frg/work-js/mozilla-release/patches/NOBUG-removegctel-25317.patch

@@ -1,15 +1,15 @@
 # HG changeset patch
 # User Frank-Rainer Grahl <frgrahl@gmx.net>
 # Date 1679841834 -7200
-# Parent  2ab4c602afb4f9f5d43c402050d41fdd0e5f5671
+# Parent  e8b0a6591d0893a8d6081b07a41da0c931e1bd03
 No Bug - Remove js garbage collection telemetry code. r=me a=me
 
 diff --git a/js/src/gc/Statistics.cpp b/js/src/gc/Statistics.cpp
 --- a/js/src/gc/Statistics.cpp
 +++ b/js/src/gc/Statistics.cpp
-@@ -589,19 +589,16 @@ Statistics::renderJsonMessage(uint64_t t
+@@ -639,19 +639,16 @@ Statistics::renderJsonMessage(uint64_t t
  
-     return UniqueChars(printer.release());
+     return printer.release();
  }
  
  void
@@ -27,7 +27,7 @@ diff --git a/js/src/gc/Statistics.cpp b/js/src/gc/Statistics.cpp
      gcDuration(&total, &longest);
      json.property("max_pause", longest, JSONPrinter::MILLISECONDS);
      json.property("total_time", total, JSONPrinter::MILLISECONDS);
-@@ -640,19 +637,16 @@ Statistics::formatJsonDescription(uint64
+@@ -690,19 +687,16 @@ Statistics::formatJsonDescription(uint64
      json.property("minor_gc_number", startingMinorGCNumber);
      json.property("slice_number", startingSliceNumber);
  }
@@ -308,7 +308,7 @@ diff --git a/toolkit/components/telemetry/pings/TelemetrySession.jsm b/toolkit/c
  
  const myScope = this;
  
-@@ -1251,21 +1250,16 @@ var Impl = {
+@@ -1247,21 +1246,16 @@ var Impl = {
  
        if (this._slowSQLStartup &&
            Object.keys(this._slowSQLStartup).length != 0 &&
@@ -330,7 +330,7 @@ diff --git a/toolkit/components/telemetry/pings/TelemetrySession.jsm b/toolkit/c
        }
      }
  
-@@ -1421,20 +1415,16 @@ var Impl = {
+@@ -1417,20 +1411,16 @@ var Impl = {
          await this._loadSessionData();
          // Update the session data to keep track of new subsessions created before
          // the initialization.
@@ -351,7 +351,7 @@ diff --git a/toolkit/components/telemetry/pings/TelemetrySession.jsm b/toolkit/c
  
            // Write the first aborted-session ping as early as possible. Just do that
            // if we are not testing, since calling Telemetry.reset() will make a previous
-@@ -1492,19 +1482,16 @@ var Impl = {
+@@ -1488,19 +1478,16 @@ var Impl = {
      cpml.addMessageListener(MESSAGE_TELEMETRY_GET_CHILD_USS, this);
  
      let delayedTask = new DeferredTask(() => {
@@ -371,7 +371,7 @@ diff --git a/toolkit/components/telemetry/pings/TelemetrySession.jsm b/toolkit/c
  
    receiveMessage: function receiveMessage(message) {
      this._log.trace("receiveMessage - Message name " + message.name);
-@@ -1623,18 +1610,16 @@ var Impl = {
+@@ -1619,18 +1606,16 @@ var Impl = {
        try {
          // Tests may flip Telemetry.canRecordExtended on and off. It can be the case
          // that the observer TOPIC_CYCLE_COLLECTOR_BEGIN was not added.

+ 2 - 2
frg/work-js/mozilla-release/patches/TOP-1636495-1-78a1.patch

@@ -107,7 +107,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
 --- a/js/src/vm/RegExpObject.cpp
 +++ b/js/src/vm/RegExpObject.cpp
 @@ -1827,10 +1827,38 @@ JS::GetRegExpSource(JSContext* cx, Handl
-     CHECK_REQUEST(cx);
+     CHECK_THREAD(cx);
  
      RegExpShared* shared = RegExpToShared(cx, obj);
      if (!shared)
@@ -120,7 +120,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
 +                                         size_t length, RegExpFlags flags,
 +                                         MutableHandleValue error) {
 +  AssertHeapIsIdle();
-+  CHECK_REQUEST(cx);
++  CHECK_THREAD(cx);
 +
 +  CompileOptions options(cx);
 +  frontend::TokenStream dummyTokenStream(cx, options, nullptr, 0, nullptr);

+ 24 - 24
frg/work-js/mozilla-release/patches/TOP-NOBUG-REGEXP-03-1537978-68a1-25318.patch

@@ -1,7 +1,7 @@
 # HG changeset patch
 # User Dmitry Butskoy <buc@buc.me>
 # Date 1690629335 -7200
-# Parent  1b8a20261115c79b5ee8db56584931b10215423c
+# Parent  69398632ec8c5d9e2a878f49dcde6d80b04cdb3f
 No Bug - Import new regexp V8 engine. r=frg a=frg
 
  Bug 1537978 - Move regular expression-related functionality out of jsapi.h
@@ -30,7 +30,7 @@ diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp
  #include "ImageOps.h"
  #include "mozAutoDocUpdate.h"
  #include "mozilla/ArrayUtils.h"
-@@ -7349,30 +7350,30 @@ nsContentUtils::IsPatternMatching(nsAStr
+@@ -7322,30 +7323,30 @@ nsContentUtils::IsPatternMatching(nsAStr
    // regexp evaluation, not actual script execution.
    JSAutoRealm ar(cx, xpc::UnprivilegedJunkScope());
  
@@ -377,7 +377,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
  #endif
  #include "frontend/BytecodeCompiler.h"
  #include "frontend/FullParseHandler.h"  // for JS_BufferIsCompileableUnit
-@@ -6589,148 +6588,16 @@ JS_ObjectIsDate(JSContext* cx, HandleObj
+@@ -6467,148 +6466,16 @@ JS_ObjectIsDate(JSContext* cx, HandleObj
          return false;
  
      *isDate = cls == ESClass::Date;
@@ -393,7 +393,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 -JS_NewRegExpObject(JSContext* cx, const char* bytes, size_t length, unsigned flags)
 -{
 -    AssertHeapIsIdle();
--    CHECK_REQUEST(cx);
+-    CHECK_THREAD(cx);
 -
 -    UniqueTwoByteChars chars(InflateString(cx, bytes, length));
 -    if (!chars)
@@ -407,7 +407,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 -JS_NewUCRegExpObject(JSContext* cx, const char16_t* chars, size_t length, unsigned flags)
 -{
 -    AssertHeapIsIdle();
--    CHECK_REQUEST(cx);
+-    CHECK_THREAD(cx);
 -
 -    return RegExpObject::create(cx, chars, length, RegExpFlag(flags), cx->tempLifoAlloc(),
 -                                GenericObject);
@@ -417,7 +417,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 -JS_SetRegExpInput(JSContext* cx, HandleObject obj, HandleString input)
 -{
 -    AssertHeapIsIdle();
--    CHECK_REQUEST(cx);
+-    CHECK_THREAD(cx);
 -    assertSameCompartment(cx, input);
 -
 -    Handle<GlobalObject*> global = obj.as<GlobalObject>();
@@ -433,7 +433,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 -JS_ClearRegExpStatics(JSContext* cx, HandleObject obj)
 -{
 -    AssertHeapIsIdle();
--    CHECK_REQUEST(cx);
+-    CHECK_THREAD(cx);
 -    MOZ_ASSERT(obj);
 -
 -    Handle<GlobalObject*> global = obj.as<GlobalObject>();
@@ -450,7 +450,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 -                 size_t length, size_t* indexp, bool test, MutableHandleValue rval)
 -{
 -    AssertHeapIsIdle();
--    CHECK_REQUEST(cx);
+-    CHECK_THREAD(cx);
 -
 -    Handle<GlobalObject*> global = obj.as<GlobalObject>();
 -    RegExpStatics* res = GlobalObject::getRegExpStatics(cx, global);
@@ -469,7 +469,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 -                          size_t* indexp, bool test, MutableHandleValue rval)
 -{
 -    AssertHeapIsIdle();
--    CHECK_REQUEST(cx);
+-    CHECK_THREAD(cx);
 -
 -    RootedLinearString input(cx, NewStringCopyN<CanGC>(cx, chars, length));
 -    if (!input)
@@ -496,7 +496,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 -JS_GetRegExpFlags(JSContext* cx, HandleObject obj)
 -{
 -    AssertHeapIsIdle();
--    CHECK_REQUEST(cx);
+-    CHECK_THREAD(cx);
 -
 -    RegExpShared* shared = RegExpToShared(cx, obj);
 -    if (!shared)
@@ -508,7 +508,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 -JS_GetRegExpSource(JSContext* cx, HandleObject obj)
 -{
 -    AssertHeapIsIdle();
--    CHECK_REQUEST(cx);
+-    CHECK_THREAD(cx);
 -
 -    RegExpShared* shared = RegExpToShared(cx, obj);
 -    if (!shared)
@@ -529,7 +529,7 @@ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
 diff --git a/js/src/jsapi.h b/js/src/jsapi.h
 --- a/js/src/jsapi.h
 +++ b/js/src/jsapi.h
-@@ -4203,67 +4203,16 @@ JS_NewDateObject(JSContext* cx, int year
+@@ -4122,67 +4122,16 @@ JS_NewDateObject(JSContext* cx, int year
   * This method returns true with |*isDate == false| when passed a proxy whose
   * target is a Date, or when passed a revoked proxy.
   */
@@ -600,7 +600,7 @@ diff --git a/js/src/jsapi.h b/js/src/jsapi.h
 diff --git a/js/src/moz.build b/js/src/moz.build
 --- a/js/src/moz.build
 +++ b/js/src/moz.build
-@@ -140,16 +140,17 @@ EXPORTS.js += [
+@@ -141,16 +141,17 @@ EXPORTS.js += [
      '../public/Principals.h',
      '../public/Printf.h',
      '../public/ProfilingFrameIterator.h',
@@ -622,7 +622,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 --- a/js/src/shell/js.cpp
 +++ b/js/src/shell/js.cpp
 @@ -77,16 +77,17 @@
- #include "js/AutoByteString.h"
+ #include "js/CharacterEncoding.h"
  #include "js/CompilationAndEvaluation.h"
  #include "js/CompileOptions.h"
  #include "js/Debug.h"
@@ -639,7 +639,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
  #include "perf/jsperf.h"
  #include "shell/jsoptparse.h"
  #include "shell/jsshell.h"
-@@ -7519,17 +7520,17 @@ Help(JSContext* cx, unsigned argc, Value
+@@ -7679,17 +7680,17 @@ Help(JSContext* cx, unsigned argc, Value
          JS_ReportErrorASCII(cx, "primitive arg");
          return false;
      }
@@ -714,7 +714,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
      if (!regexp)
          return nullptr;
  
-@@ -1500,8 +1507,142 @@ js::RegExpToSharedNonInline(JSContext* c
+@@ -1491,8 +1498,142 @@ js::RegExpToSharedNonInline(JSContext* c
  }
  
  JS::ubi::Node::Size
@@ -731,7 +731,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
 +JS::NewRegExpObject(JSContext* cx, const char* bytes, size_t length, unsigned flags)
 +{
 +    AssertHeapIsIdle();
-+    CHECK_REQUEST(cx);
++    CHECK_THREAD(cx);
 +
 +    UniqueTwoByteChars chars(InflateString(cx, bytes, length));
 +    if (!chars) {
@@ -746,7 +746,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
 +JS::NewUCRegExpObject(JSContext* cx, const char16_t* chars, size_t length, unsigned flags)
 +{
 +    AssertHeapIsIdle();
-+    CHECK_REQUEST(cx);
++    CHECK_THREAD(cx);
 +
 +    return RegExpObject::create(cx, chars, length, RegExpFlag(flags), cx->tempLifoAlloc(),
 +                                GenericObject);
@@ -756,7 +756,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
 +JS::SetRegExpInput(JSContext* cx, HandleObject obj, HandleString input)
 +{
 +    AssertHeapIsIdle();
-+    CHECK_REQUEST(cx);
++    CHECK_THREAD(cx);
 +    assertSameCompartment(cx, input);
 +
 +    Handle<GlobalObject*> global = obj.as<GlobalObject>();
@@ -772,7 +772,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
 +JS::ClearRegExpStatics(JSContext* cx, HandleObject obj)
 +{
 +    AssertHeapIsIdle();
-+    CHECK_REQUEST(cx);
++    CHECK_THREAD(cx);
 +    MOZ_ASSERT(obj);
 +
 +    Handle<GlobalObject*> global = obj.as<GlobalObject>();
@@ -789,7 +789,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
 +                 size_t length, size_t* indexp, bool test, MutableHandleValue rval)
 +{
 +    AssertHeapIsIdle();
-+    CHECK_REQUEST(cx);
++    CHECK_THREAD(cx);
 +
 +    Handle<GlobalObject*> global = obj.as<GlobalObject>();
 +    RegExpStatics* res = GlobalObject::getRegExpStatics(cx, global);
@@ -808,7 +808,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
 +                          size_t* indexp, bool test, MutableHandleValue rval)
 +{
 +    AssertHeapIsIdle();
-+    CHECK_REQUEST(cx);
++    CHECK_THREAD(cx);
 +
 +    RootedLinearString input(cx, NewStringCopyN<CanGC>(cx, chars, length));
 +    if (!input)
@@ -835,7 +835,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
 +JS::GetRegExpFlags(JSContext* cx, HandleObject obj)
 +{
 +    AssertHeapIsIdle();
-+    CHECK_REQUEST(cx);
++    CHECK_THREAD(cx);
 +
 +    RegExpShared* shared = RegExpToShared(cx, obj);
 +    if (!shared)
@@ -847,7 +847,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
 +JS::GetRegExpSource(JSContext* cx, HandleObject obj)
 +{
 +    AssertHeapIsIdle();
-+    CHECK_REQUEST(cx);
++    CHECK_THREAD(cx);
 +
 +    RegExpShared* shared = RegExpToShared(cx, obj);
 +    if (!shared)

+ 19 - 19
frg/work-js/mozilla-release/patches/TOP-NOBUG-REGEXP-04-1539690-68a1-25318.patch

@@ -1,7 +1,7 @@
 # HG changeset patch
 # User Dmitry Butskoy <buc@buc.me>
 # Date 1690629350 -7200
-# Parent  42fb05fd6f08cadae20273042e7c78ed5be629ba
+# Parent  14bffdc76c8510ac13de02240e13ee1525c0ba28
 No Bug - Import new regexp V8 engine. r=frg a=frg
 
 diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp
@@ -539,7 +539,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
 @@ -42,16 +42,17 @@
  #include "jit/InlinableNatives.h"
  #include "jit/JitRealm.h"
- #include "js/AutoByteString.h"
+ #include "js/CharacterEncoding.h"
  #include "js/CompilationAndEvaluation.h"
  #include "js/CompileOptions.h"
  #include "js/Debug.h"
@@ -573,7 +573,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
  
  // If disableOOMFunctions is set, disable functionality that causes artificial
  // OOM conditions.
-@@ -4646,17 +4649,17 @@ ParseRegExp(JSContext* cx, unsigned argc
+@@ -4653,17 +4656,17 @@ ParseRegExp(JSContext* cx, unsigned argc
          return false;
      }
  
@@ -592,7 +592,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
          RootedString flagStr(cx, args[1].toString());
          if (!ParseRegExpFlags(cx, flagStr, &flags))
              return false;
-@@ -4675,21 +4678,17 @@ ParseRegExp(JSContext* cx, unsigned argc
+@@ -4682,21 +4685,17 @@ ParseRegExp(JSContext* cx, unsigned argc
      if (!pattern)
          return false;
  
@@ -618,7 +618,8 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
 diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
 --- a/js/src/frontend/Parser.cpp
 +++ b/js/src/frontend/Parser.cpp
-@@ -35,16 +35,17 @@
+@@ -34,16 +34,17 @@
+ #include "jstypes.h"
  
  #include "builtin/ModuleObject.h"
  #include "builtin/SelfHostingDefines.h"
@@ -626,7 +627,6 @@ diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
  #include "frontend/FoldConstants.h"
  #include "frontend/TokenStream.h"
  #include "irregexp/RegExpParser.h"
- #include "js/AutoByteString.h"
 +#include "js/RegExpFlags.h"
  #include "vm/BytecodeUtil.h"
  #include "vm/JSAtom.h"
@@ -636,7 +636,7 @@ diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
  #include "vm/RegExpObject.h"
  #include "vm/StringType.h"
  #include "wasm/AsmJS.h"
-@@ -63,16 +64,17 @@ using mozilla::PodCopy;
+@@ -62,16 +63,17 @@ using mozilla::PodCopy;
  using mozilla::PodZero;
  using mozilla::PointerRangeSize;
  using mozilla::Some;
@@ -654,7 +654,7 @@ diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
  using AddDeclaredNamePtr = ParseContext::Scope::AddDeclaredNamePtr;
  using BindingIter = ParseContext::Scope::BindingIter;
  using UsedNamePtr = UsedNameTracker::UsedNameMap::Ptr;
-@@ -9463,17 +9465,17 @@ GeneralParser<ParseHandler, CharT>::noSu
+@@ -9462,17 +9464,17 @@ GeneralParser<ParseHandler, CharT>::noSu
  template <typename CharT>
  ParseNode*
  Parser<FullParseHandler, CharT>::newRegExp()
@@ -673,7 +673,7 @@ diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
          return null();
  
      return handler.newRegExp(reobj, pos(), *this);
-@@ -9482,20 +9484,20 @@ Parser<FullParseHandler, CharT>::newRegE
+@@ -9481,20 +9483,20 @@ Parser<FullParseHandler, CharT>::newRegE
  template <typename CharT>
  SyntaxParseHandler::Node
  Parser<SyntaxParseHandler, CharT>::newRegExp()
@@ -1309,7 +1309,7 @@ diff --git a/js/src/jsapi-tests/tests.h b/js/src/jsapi-tests/tests.h
  
  #include "gc/GC.h"
  #include "js/AllocPolicy.h"
- #include "js/AutoByteString.h"
+ #include "js/CharacterEncoding.h"
 +#include "js/RegExpFlags.h"
  #include "js/Vector.h"
  #include "vm/JSContext.h"
@@ -1319,7 +1319,7 @@ diff --git a/js/src/jsapi-tests/tests.h b/js/src/jsapi-tests/tests.h
      js::Vector<char, 0, js::SystemAllocPolicy> chars;
  
    public:
-@@ -144,16 +145,37 @@ class JSAPITest
+@@ -142,16 +143,37 @@ class JSAPITest
      JSAPITestString toSource(int v) {
          return toSource((long)v);
      }
@@ -1360,7 +1360,7 @@ diff --git a/js/src/jsapi-tests/tests.h b/js/src/jsapi-tests/tests.h
 diff --git a/js/src/moz.build b/js/src/moz.build
 --- a/js/src/moz.build
 +++ b/js/src/moz.build
-@@ -143,16 +143,17 @@ EXPORTS.js += [
+@@ -142,16 +142,17 @@ EXPORTS.js += [
      '../public/Printf.h',
      '../public/ProfilingFrameIterator.h',
      '../public/ProfilingStack.h',
@@ -1883,7 +1883,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
 +JS::NewRegExpObject(JSContext* cx, const char* bytes, size_t length, RegExpFlags flags)
  {
      AssertHeapIsIdle();
-     CHECK_REQUEST(cx);
+     CHECK_THREAD(cx);
  
      UniqueTwoByteChars chars(InflateString(cx, bytes, length));
      if (!chars) {
@@ -1900,7 +1900,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
 +JS::NewUCRegExpObject(JSContext* cx, const char16_t* chars, size_t length, RegExpFlags flags)
  {
      AssertHeapIsIdle();
-     CHECK_REQUEST(cx);
+     CHECK_THREAD(cx);
  
 -    return RegExpObject::create(cx, chars, length, RegExpFlag(flags), cx->tempLifoAlloc(),
 +    return RegExpObject::create(cx, chars, length, flags, cx->tempLifoAlloc(),
@@ -1911,7 +1911,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
  JS::SetRegExpInput(JSContext* cx, HandleObject obj, HandleString input)
  {
      AssertHeapIsIdle();
-     CHECK_REQUEST(cx);
+     CHECK_THREAD(cx);
 @@ -1606,25 +1611,25 @@ JS::ObjectIsRegExp(JSContext* cx, Handle
      ESClass cls;
      if (!GetBuiltinClass(cx, obj, &cls))
@@ -1926,7 +1926,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
  JS::GetRegExpFlags(JSContext* cx, HandleObject obj)
  {
      AssertHeapIsIdle();
-     CHECK_REQUEST(cx);
+     CHECK_THREAD(cx);
  
      RegExpShared* shared = RegExpToShared(cx, obj);
      if (!shared)
@@ -1939,7 +1939,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
  JS::GetRegExpSource(JSContext* cx, HandleObject obj)
  {
      AssertHeapIsIdle();
-     CHECK_REQUEST(cx);
+     CHECK_THREAD(cx);
 diff --git a/js/src/vm/RegExpObject.h b/js/src/vm/RegExpObject.h
 --- a/js/src/vm/RegExpObject.h
 +++ b/js/src/vm/RegExpObject.h
@@ -2352,7 +2352,7 @@ diff --git a/js/src/vm/StructuredClone.cpp b/js/src/vm/StructuredClone.cpp
  //
  // Note that SCTAG_END_OF_KEYS is written into the serialized form and should have
  // a stable ID, it need not be at the end of the list and should not be used for
-@@ -1682,17 +1686,17 @@ JSStructuredCloneWriter::startWrite(Hand
+@@ -1679,17 +1683,17 @@ JSStructuredCloneWriter::startWrite(Hand
              if (!Unbox(context(), obj, &unboxed))
                  return false;
              return out.writePair(SCTAG_BOOLEAN_OBJECT, unboxed.toBoolean());
@@ -2371,7 +2371,7 @@ diff --git a/js/src/vm/StructuredClone.cpp b/js/src/vm/StructuredClone.cpp
              break;
            }
            case ESClass::SharedArrayBuffer:
-@@ -2410,17 +2414,17 @@ JSStructuredCloneReader::startRead(Mutab
+@@ -2407,17 +2411,17 @@ JSStructuredCloneReader::startRead(Mutab
          JSObject* obj = NewDateObjectMsec(context(), t);
          if (!obj)
              return false;

+ 5 - 5
frg/work-js/mozilla-release/patches/TOP-NOBUG-REGEXP-06-1504947-10-68a1-25318.patch

@@ -1,7 +1,7 @@
 # HG changeset patch
 # User Dmitry Butskoy <buc@buc.me>
 # Date 1690629575 -7200
-# Parent  0c76ffe2de092068eb1ce9215a72c87863ea0987
+# Parent  000a4115898af9a0578c0755a98fc9f74e2fbe95
 No Bug - Import new regexp V8 engine. r=frg a=frg
 
 Bug 1504947 Part 10 "Implement js::unicode::CountCodePoints(const Unit* begin, const Unit* end) for use in counting code points in a range, generally"
@@ -35,7 +35,7 @@ diff --git a/js/src/util/Text.cpp b/js/src/util/Text.cpp
  using js::gc::AutoSuppressGC;
  using mozilla::PodCopy;
  
-@@ -325,8 +330,32 @@ js::PutEscapedStringImpl(char* buffer, s
+@@ -289,8 +294,32 @@ js::PutEscapedStringImpl(char* buffer, s
  
  template size_t
  js::PutEscapedString(char* buffer, size_t bufferSize, const Latin1Char* chars, size_t length,
@@ -71,14 +71,14 @@ diff --git a/js/src/util/Text.cpp b/js/src/util/Text.cpp
 diff --git a/js/src/util/Text.h b/js/src/util/Text.h
 --- a/js/src/util/Text.h
 +++ b/js/src/util/Text.h
-@@ -242,11 +242,22 @@ FileEscapedString(FILE* fp, const char* 
+@@ -217,11 +217,22 @@ FileEscapedString(FILE* fp, const char* 
      bool res = EscapedStringPrinter(out, chars, length, quote);
      out.finish();
      return res;
  }
  
- bool
- EncodeURI(JSContext* cx, StringBuffer& sb, const char* chars, size_t length);
+ JSString*
+ EncodeURI(JSContext* cx, const char* chars, size_t length);
  
 +namespace unicode {
 +/**

+ 16 - 17
frg/work-js/mozilla-release/patches/TOP-NOBUG-REGEXP-07-1626713-76a1-25318.patch

@@ -1,7 +1,7 @@
 # HG changeset patch
 # User Dmitry Butskoy <buc@buc.me>
 # Date 1690629593 -7200
-# Parent  06f107cc9958362897221d32bae49cd7b2fe6eef
+# Parent  96128948d930c094a200f69807830c731d465a59
 No Bug - Import new regexp V8 engine. r=frg a=frg
 
 diff --git a/js/src/builtin/RegExp.cpp b/js/src/builtin/RegExp.cpp
@@ -78,10 +78,10 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
  #include "jit/BaselineJIT.h"
  #include "jit/InlinableNatives.h"
  #include "jit/JitRealm.h"
- #include "js/AutoByteString.h"
+ #include "js/CharacterEncoding.h"
  #include "js/CompilationAndEvaluation.h"
  #include "js/CompileOptions.h"
-@@ -4494,17 +4496,17 @@ GetModuleEnvironmentValue(JSContext* cx,
+@@ -4382,17 +4384,17 @@ GetModuleEnvironmentValue(JSContext* cx,
      if (args.rval().isMagic(JS_UNINITIALIZED_LEXICAL)) {
          ReportRuntimeLexicalError(cx, JSMSG_UNINITIALIZED_LEXICAL, id);
          return false;
@@ -100,7 +100,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
          return "START_OF_LINE";
        case irregexp::RegExpAssertion::START_OF_INPUT:
          return "START_OF_INPUT";
-@@ -4855,17 +4857,17 @@ DisRegExp(JSContext* cx, unsigned argc, 
+@@ -4743,17 +4745,17 @@ DisRegExp(JSContext* cx, unsigned argc, 
      }
  
      if (!RegExpObject::dumpBytecode(cx, reobj, match_only, input))
@@ -119,7 +119,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
      RootedObject callee(cx, &args.callee());
  
      if (args.length() != 0) {
-@@ -6045,17 +6047,17 @@ gc::ZealModeHelpText),
+@@ -5920,17 +5922,17 @@ gc::ZealModeHelpText),
  "    baselineCompile();  for (var i=0; i<1; i++) {} ...\n"
  "  The interpreter will enter the new jitcode at the loop header unless\n"
  "  baselineCompile returned a string or threw an error.\n"),
@@ -141,7 +141,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
 diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
 --- a/js/src/frontend/Parser.cpp
 +++ b/js/src/frontend/Parser.cpp
-@@ -33,19 +33,24 @@
+@@ -33,18 +33,23 @@
  #include "jsnum.h"
  #include "jstypes.h"
  
@@ -154,7 +154,6 @@ diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
 +#ifndef JS_NEW_REGEXP
 +#  include "irregexp/RegExpParser.h"
 +#endif
- #include "js/AutoByteString.h"
  #include "js/RegExpFlags.h"
 +#ifdef JS_NEW_REGEXP
 +#  include "new-regexp/RegExpAPI.h"
@@ -167,7 +166,7 @@ diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
  #include "vm/RegExpObject.h"
  #include "vm/StringType.h"
  #include "wasm/AsmJS.h"
-@@ -9487,19 +9492,24 @@ Parser<SyntaxParseHandler, CharT>::newRe
+@@ -9486,19 +9491,24 @@ Parser<SyntaxParseHandler, CharT>::newRe
  {
      MOZ_ASSERT(!options().selfHostingMode);
  
@@ -217,7 +216,7 @@ diff --git a/js/src/jit/CodeGenerator.cpp b/js/src/jit/CodeGenerator.cpp
  #include "jit/JitcodeMap.h"
  #include "jit/JitSpewer.h"
  #include "jit/Linker.h"
-@@ -1376,35 +1378,66 @@ CodeGenerator::visitRegExp(LRegExp* lir)
+@@ -1399,35 +1401,66 @@ CodeGenerator::visitRegExp(LRegExp* lir)
          TemplateObject templateObject(source);
          masm.createGCObject(output, temp, templateObject, gc::DefaultHeap, ool->entry());
      } else {
@@ -287,7 +286,7 @@ diff --git a/js/src/jit/CodeGenerator.cpp b/js/src/jit/CodeGenerator.cpp
  PrepareAndExecuteRegExp(JSContext* cx, MacroAssembler& masm, Register regexp, Register input,
                          Register lastIndex,
                          Register temp1, Register temp2, Register temp3,
-@@ -1697,16 +1730,18 @@ PrepareAndExecuteRegExp(JSContext* cx, M
+@@ -1720,16 +1753,18 @@ PrepareAndExecuteRegExp(JSContext* cx, M
      if (mode == RegExpShared::MatchOnly) {
          // endIndex is passed via temp3.
          masm.load32(endIndexAddress, temp3);
@@ -306,7 +305,7 @@ diff --git a/js/src/jit/CodeGenerator.cpp b/js/src/jit/CodeGenerator.cpp
  {
      CharEncoding encoding_;
      Register string_;
-@@ -2245,17 +2280,17 @@ CodeGenerator::visitOutOfLineRegExpMatch
+@@ -2268,17 +2303,17 @@ CodeGenerator::visitOutOfLineRegExpMatch
  
      AllocatableGeneralRegisterSet regs(GeneralRegisterSet::All());
      regs.take(lastIndex);
@@ -325,7 +324,7 @@ diff --git a/js/src/jit/CodeGenerator.cpp b/js/src/jit/CodeGenerator.cpp
  
      // We are not using oolCallVM because we are in a Call, and that live
      // registers are already saved by the the register allocator.
-@@ -2436,17 +2471,17 @@ CodeGenerator::visitOutOfLineRegExpSearc
+@@ -2459,17 +2494,17 @@ CodeGenerator::visitOutOfLineRegExpSearc
  
      AllocatableGeneralRegisterSet regs(GeneralRegisterSet::All());
      regs.take(lastIndex);
@@ -344,7 +343,7 @@ diff --git a/js/src/jit/CodeGenerator.cpp b/js/src/jit/CodeGenerator.cpp
  
      // We are not using oolCallVM because we are in a Call, and that live
      // registers are already saved by the the register allocator.
-@@ -2505,17 +2540,17 @@ JitRealm::generateRegExpTesterStub(JSCon
+@@ -2528,17 +2563,17 @@ JitRealm::generateRegExpTesterStub(JSCon
      regs.take(input);
      regs.take(regexp);
      regs.take(lastIndex);
@@ -363,7 +362,7 @@ diff --git a/js/src/jit/CodeGenerator.cpp b/js/src/jit/CodeGenerator.cpp
                                   &notFound, &oolEntry))
      {
          return nullptr;
-@@ -2530,17 +2565,17 @@ JitRealm::generateRegExpTesterStub(JSCon
+@@ -2553,17 +2588,17 @@ JitRealm::generateRegExpTesterStub(JSCon
      masm.bind(&notFound);
      masm.move32(Imm32(RegExpTesterResultNotFound), result);
      masm.jump(&done);
@@ -743,7 +742,7 @@ diff --git a/js/src/new-regexp/moz.build b/js/src/new-regexp/moz.build
 diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
 --- a/js/src/vm/JSContext.cpp
 +++ b/js/src/vm/JSContext.cpp
-@@ -41,16 +41,19 @@
+@@ -40,16 +40,19 @@
  #include "js/CharacterEncoding.h"
  #include "js/Printf.h"
  #ifdef JS_SIMULATOR_ARM64
@@ -763,7 +762,7 @@ diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
  #include "vm/HelperThreads.h"
  #include "vm/Iteration.h"
  #include "vm/JSAtom.h"
-@@ -106,19 +109,26 @@ js::AutoCycleDetector::~AutoCycleDetecto
+@@ -105,19 +108,26 @@ js::AutoCycleDetector::~AutoCycleDetecto
      }
  }
  
@@ -813,7 +812,7 @@ diff --git a/js/src/vm/JSContext.h b/js/src/vm/JSContext.h
  struct DtoaState;
  
  namespace js {
-@@ -375,18 +378,23 @@ struct JSContext : public JS::RootingCon
+@@ -399,18 +402,23 @@ struct JSContext : public JS::RootingCon
      mozilla::GenericErrorResult<JS::Error&> alreadyReportedError();
  
      /*

+ 14 - 16
frg/work-js/mozilla-release/patches/TOP-NOBUG-REGEXP-37-1642493-79a1-25318.patch

@@ -1,7 +1,7 @@
 # HG changeset patch
 # User Dmitry Butskoy <buc@buc.me>
 # Date 1690631112 -7200
-# Parent  92e4360ccd7e57de95b6cc87c6ebe7d04fad771a
+# Parent  2fa60bc3c6943505d7ee7708f7e7b143bfe48215
 No Bug - Import new regexp V8 engine. r=frg a=frg
 
 diff --git a/.clang-format-ignore b/.clang-format-ignore
@@ -227,10 +227,10 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
  #include "jit/BaselineJIT.h"
  #include "jit/InlinableNatives.h"
  #include "jit/JitRealm.h"
- #include "js/AutoByteString.h"
+ #include "js/CharacterEncoding.h"
  #include "js/CompilationAndEvaluation.h"
  #include "js/CompileOptions.h"
-@@ -4377,370 +4372,16 @@ GetModuleEnvironmentValue(JSContext* cx,
+@@ -4384,370 +4379,16 @@ GetModuleEnvironmentValue(JSContext* cx,
      if (args.rval().isMagic(JS_UNINITIALIZED_LEXICAL)) {
          ReportRuntimeLexicalError(cx, JSMSG_UNINITIALIZED_LEXICAL, id);
          return false;
@@ -601,7 +601,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
  
      if (args.length() != 0) {
          ReportUsageErrorASCII(cx, callee, "Wrong number of arguments");
-@@ -5921,26 +5562,16 @@ gc::ZealModeHelpText),
+@@ -5913,26 +5554,16 @@ gc::ZealModeHelpText),
  "    baselineCompile();  for (var i=0; i<1; i++) {} ...\n"
  "  The interpreter will enter the new jitcode at the loop header unless\n"
  "  baselineCompile returned a string or threw an error.\n"),
@@ -631,7 +631,7 @@ diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctio
 diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
 --- a/js/src/frontend/Parser.cpp
 +++ b/js/src/frontend/Parser.cpp
-@@ -33,24 +33,19 @@
+@@ -33,23 +33,18 @@
  #include "jsnum.h"
  #include "jstypes.h"
  
@@ -644,7 +644,6 @@ diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
 -#  include "irregexp/RegExpParser.h"
 -#endif
 +#include "irregexp/RegExpAPI.h"
- #include "js/AutoByteString.h"
  #include "js/RegExpFlags.h"
 -#ifdef JS_NEW_REGEXP
 -#  include "new-regexp/RegExpAPI.h"
@@ -657,7 +656,7 @@ diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
  #include "vm/RegExpObject.h"
  #include "vm/StringType.h"
  #include "wasm/AsmJS.h"
-@@ -9492,24 +9487,19 @@ Parser<SyntaxParseHandler, CharT>::newRe
+@@ -9491,24 +9486,19 @@ Parser<SyntaxParseHandler, CharT>::newRe
  {
      MOZ_ASSERT(!options().selfHostingMode);
  
@@ -41925,7 +41924,7 @@ deleted file mode 100644
 diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 --- a/js/src/shell/js.cpp
 +++ b/js/src/shell/js.cpp
-@@ -8892,22 +8892,20 @@ SetContextOptions(JSContext* cx, const O
+@@ -8899,22 +8899,20 @@ SetContextOptions(JSContext* cx, const O
      int32_t warmUpThreshold = op.getIntOption("ion-warmup-threshold");
      if (warmUpThreshold >= 0)
          jit::JitOptions.setCompilerWarmUpThreshold(warmUpThreshold);
@@ -41948,7 +41947,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
          jit::JitOptions.forcedRegisterAllocator = jit::LookupRegisterAllocator(str);
          if (!jit::JitOptions.forcedRegisterAllocator.isSome())
              return OptionFailure("ion-regalloc", str);
-@@ -9267,23 +9265,21 @@ main(int argc, char** argv, char** envp)
+@@ -9272,23 +9270,21 @@ main(int argc, char** argv, char** envp)
          || !op.addBoolOption('\0', "test-wasm-await-tier2", "Forcibly activate tiering and block "
                                     "instantiation on completion of tier2")
  #ifdef ENABLE_WASM_GC
@@ -41975,7 +41974,7 @@ diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
 diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
 --- a/js/src/vm/JSContext.cpp
 +++ b/js/src/vm/JSContext.cpp
-@@ -30,30 +30,28 @@
+@@ -30,29 +30,27 @@
  
  #include "jsexn.h"
  #include "jspubtd.h"
@@ -41987,7 +41986,6 @@ diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
 +#include "irregexp/RegExpAPI.h"
  #include "jit/Ion.h"
  #include "jit/PcScriptCache.h"
- #include "js/AutoByteString.h"
  #include "js/CharacterEncoding.h"
  #include "js/Printf.h"
  #ifdef JS_SIMULATOR_ARM64
@@ -42007,7 +42005,7 @@ diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
  #include "vm/HelperThreads.h"
  #include "vm/Iteration.h"
  #include "vm/JSAtom.h"
-@@ -109,22 +107,16 @@ js::AutoCycleDetector::~AutoCycleDetecto
+@@ -108,22 +106,16 @@ js::AutoCycleDetector::~AutoCycleDetecto
      }
  }
  
@@ -42030,7 +42028,7 @@ diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
          simulator_ = jit::Simulator::Create(this);
          if (!simulator_) {
              return false;
-@@ -136,22 +128,20 @@ JSContext::init(ContextKind kind)
+@@ -135,22 +127,20 @@ JSContext::init(ContextKind kind)
          }
      } else {
          atomsZoneFreeLists_ = js_new<FreeLists>();
@@ -42053,7 +42051,7 @@ diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
      return true;
  }
  
-@@ -1393,19 +1383,17 @@ JSContext::~JSContext()
+@@ -1385,19 +1375,17 @@ JSContext::~JSContext()
  #endif
  
  #ifdef JS_TRACE_LOGGING
@@ -42102,7 +42100,7 @@ diff --git a/js/src/vm/JSContext.h b/js/src/vm/JSContext.h
  struct DtoaState;
  
  namespace js {
-@@ -403,23 +401,18 @@ struct JSContext : public JS::RootingCon
+@@ -402,23 +400,18 @@ struct JSContext : public JS::RootingCon
      mozilla::GenericErrorResult<JS::Error&> alreadyReportedError();
  
      /*
@@ -42936,7 +42934,7 @@ diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
 @@ -1931,23 +1332,18 @@ JS_PUBLIC_API(bool) JS::CheckRegExpSynta
                                           MutableHandleValue error) {
    AssertHeapIsIdle();
-   CHECK_REQUEST(cx);
+   CHECK_THREAD(cx);
  
    CompileOptions options(cx);
    frontend::TokenStream dummyTokenStream(cx, options, nullptr, 0, nullptr);

+ 0 - 44
frg/work-js/mozilla-release/patches/mozilla-central-push_434625.patch

@@ -1,44 +0,0 @@
-# HG changeset patch
-# User Jan de Mooij <jdemooij@mozilla.com>
-# Date 1535988655 -7200
-#      Mon Sep 03 17:30:55 2018 +0200
-# Node ID 5c25f4ef0c29b4fab4b7ee53c8fa9f402874b7aa
-# Parent  c2c2b68be0960385b411076b9e4f388448c16ce9
-Bug 1484905 - Don't mark MGetFirstDollarIndex as movable. r=arai
-
-Differential Revision: https://phabricator.services.mozilla.com/D4879
-
-diff --git a/js/src/jit-test/tests/ion/bug1484905.js b/js/src/jit-test/tests/ion/bug1484905.js
-new file mode 100644
---- /dev/null
-+++ b/js/src/jit-test/tests/ion/bug1484905.js
-@@ -0,0 +1,4 @@
-+// |jit-test| --ion-limit-script-size=off; --ion-gvn=off
-+for (var i = 0; i < 1; ++i) {
-+    "".replace(/x/, "").replace(/y/, "12");
-+}
-diff --git a/js/src/jit/MIR.h b/js/src/jit/MIR.h
---- a/js/src/jit/MIR.h
-+++ b/js/src/jit/MIR.h
-@@ -7584,17 +7584,20 @@ class MRegExpInstanceOptimizable
- class MGetFirstDollarIndex
-   : public MUnaryInstruction,
-     public StringPolicy<0>::Data
- {
-     explicit MGetFirstDollarIndex(MDefinition* str)
-       : MUnaryInstruction(classOpcode, str)
-     {
-         setResultType(MIRType::Int32);
--        setMovable();
-+
-+        // Codegen assumes string length > 0. Don't allow LICM to move this
-+        // before the .length > 1 check in RegExpReplace in RegExp.js.
-+        MOZ_ASSERT(!isMovable());
-     }
- 
-   public:
-     INSTRUCTION_HEADER(GetFirstDollarIndex)
-     TRIVIAL_NEW_WRAPPERS
-     NAMED_OPERANDS((0, str))
- 
-     AliasSet getAliasSet() const override {

+ 0 - 33
frg/work-js/mozilla-release/patches/mozilla-central-push_434823.patch

@@ -1,33 +0,0 @@
-# HG changeset patch
-# User Jon Coppeard <jcoppeard@mozilla.com>
-# Date 1536143136 -3600
-#      Wed Sep 05 11:25:36 2018 +0100
-# Node ID ccd4dbac66cde136db3b188a962fbef0606b0db6
-# Parent  3988c607621fca1be4e079bbcda4e8c0e1787467
-Bug 1488463 - Handle OOM in RegExpShared::compile() r=nbp
-
-diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
---- a/js/src/vm/RegExpObject.cpp
-+++ b/js/src/vm/RegExpObject.cpp
-@@ -1039,18 +1039,20 @@ RegExpShared::compile(JSContext* cx, Mut
- 
-     RegExpCompilation& compilation = re->compilation(mode, input->hasLatin1Chars());
-     if (code.jitCode) {
-         // First copy the tables. GC can purge the tables if the RegExpShared
-         // has no JIT code, so it's important to do this right before setting
-         // compilation.jitCode (to ensure no purging happens between adding the
-         // tables and setting the JIT code).
-         for (size_t i = 0; i < tables.length(); i++) {
--            if (!re->addTable(std::move(tables[i])))
-+            if (!re->addTable(std::move(tables[i]))) {
-+                ReportOutOfMemory(cx);
-                 return false;
-+            }
-         }
-         compilation.jitCode = code.jitCode;
-     } else if (code.byteCode) {
-         MOZ_ASSERT(tables.empty(), "RegExpInterpreter does not use data tables");
-         compilation.byteCode = code.byteCode;
-     }
- 
-     return true;

+ 0 - 59
frg/work-js/mozilla-release/patches/mozilla-central-push_434991.patch

@@ -1,59 +0,0 @@
-# HG changeset patch
-# User Jim Porter <jporter@mozilla.com>
-# Date 1536173543 0
-#      Wed Sep 05 18:52:23 2018 +0000
-# Node ID 1f62e4c2870def144c9e3a1d31993242234e4082
-# Parent  e12d3b4009bf21d172e8e15d988d06e47abda7f4
-Bug 1483323 part 6 - Fix recognizing JSID_EMPTY r=tromey
-
-Bug 1464036 changed how JSID_EMPTY was defined; this patch updates the gdb
-plugin accordingly.
-
-Depends on D4611
-
-Differential Revision: https://phabricator.services.mozilla.com/D4612
-
-diff --git a/js/src/gdb/mozilla/jsid.py b/js/src/gdb/mozilla/jsid.py
---- a/js/src/gdb/mozilla/jsid.py
-+++ b/js/src/gdb/mozilla/jsid.py
-@@ -15,16 +15,17 @@ class jsid(object):
-     # Since people don't always build with macro debugging info, I can't
-     # think of any way to avoid copying these values here, short of using
-     # inferior calls for every operation (which, I hear, is broken from
-     # pretty-printers in some recent GDBs).
-     TYPE_STRING = 0x0
-     TYPE_INT = 0x1
-     TYPE_VOID = 0x2
-     TYPE_SYMBOL = 0x4
-+    TYPE_EMPTY = 0x6
-     TYPE_MASK = 0x7
- 
-     def __init__(self, value, cache):
-         self.value = value
-         self.cache = cache
-         self.concrete_type = self.value.type.strip_typedefs()
- 
-     # SpiderMonkey has two alternative definitions of jsid: a typedef for
-@@ -44,20 +45,20 @@ class jsid(object):
-         tag = bits & jsid.TYPE_MASK
-         if tag == jsid.TYPE_STRING:
-             body = bits.cast(self.cache.JSString_ptr_t)
-         elif tag & jsid.TYPE_INT:
-             body = bits >> 1
-         elif tag == jsid.TYPE_VOID:
-             return "JSID_VOID"
-         elif tag == jsid.TYPE_SYMBOL:
--            if bits == jsid.TYPE_SYMBOL:
--                return "JSID_EMPTY"
-             body = ((bits & ~jsid.TYPE_MASK)
-                     .cast(self.cache.JSSymbol_ptr_t))
-+        elif tag == jsid.TYPE_EMPTY:
-+            return "JSID_EMPTY"
-         else:
-             body = "<unrecognized>"
-         return '$jsid(%s)' % (body,)
- 
- 
- @pretty_printer('JS::Rooted<long>')
- def RootedJSID(value, cache):
-     # Hard-code the referent type pretty-printer for jsid roots and handles.

+ 0 - 1143
frg/work-js/mozilla-release/patches/mozilla-central-push_434999.patch

@@ -1,1143 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536135909 25200
-#      Wed Sep 05 01:25:09 2018 -0700
-# Node ID 775159907c734fcef22df5b9a26316aa78dad732
-# Parent  52ae4d84b11e507483430e922d25b2083ad5c73e
-Bug 1485066 - Part 2: Use UniqueChars as return-type in functions previously using JSAutoByteString out-param. r=Waldo
-
-diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
---- a/js/src/builtin/TestingFunctions.cpp
-+++ b/js/src/builtin/TestingFunctions.cpp
-@@ -2192,18 +2192,17 @@ DumpHeap(JSContext* cx, unsigned argc, V
-     if (args.length() > i) {
-         Value v = args[i];
-         if (v.isString()) {
-             if (!fuzzingSafe) {
-                 RootedString str(cx, v.toString());
-                 UniqueChars fileNameBytes = JS_EncodeString(cx, str);
-                 if (!fileNameBytes)
-                     return false;
--                const char* fileName = fileNameBytes.get();
--                dumpFile = fopen(fileName, "w");
-+                dumpFile = fopen(fileNameBytes.get(), "w");
-                 if (!dumpFile) {
-                     fileNameBytes = JS_EncodeStringToUTF8(cx, str);
-                     if (!fileNameBytes)
-                         return false;
-                     JS_ReportErrorUTF8(cx, "can't open %s", fileNameBytes.get());
-                     return false;
-                 }
-             }
-diff --git a/js/src/ctypes/CTypes.cpp b/js/src/ctypes/CTypes.cpp
---- a/js/src/ctypes/CTypes.cpp
-+++ b/js/src/ctypes/CTypes.cpp
-@@ -977,21 +977,20 @@ static const JSErrorFormatString ErrorFo
- static const JSErrorFormatString*
- GetErrorMessage(void* userRef, const unsigned errorNumber)
- {
-   if (0 < errorNumber && errorNumber < CTYPESERR_LIMIT)
-     return &ErrorFormatString[errorNumber];
-   return nullptr;
- }
- 
--static const char*
--EncodeLatin1(JSContext* cx, AutoString& str, JS::UniqueChars& bytes)
--{
--  bytes = JS_EncodeString(cx, NewUCString(cx, str.finish()));
--  return bytes.get();
-+static JS::UniqueChars
-+EncodeLatin1(JSContext* cx, AutoString& str)
-+{
-+  return JS_EncodeString(cx, NewUCString(cx, str.finish()));
- }
- 
- static const char*
- CTypesToSourceForError(JSContext* cx, HandleValue val, JS::UniqueChars& bytes)
- {
-   if (val.isObject()) {
-       RootedObject obj(cx, &val.toObject());
-       if (CType::IsCType(obj) || CData::IsCDataMaybeUnwrap(&obj)) {
-@@ -1193,122 +1192,114 @@ ConvError(JSContext* cx, const char* exp
-     switch (CType::GetTypeCode(arrObj)) {
-     case TYPE_array: {
-       MOZ_ASSERT(!funObj);
- 
-       char indexStr[16];
-       SprintfLiteral(indexStr, "%u", arrIndex);
- 
-       AutoString arrSource;
--      JS::UniqueChars arrBytes;
-       BuildTypeSource(cx, arrObj, true, arrSource);
-       if (!arrSource)
-           return false;
--      const char* arrStr = EncodeLatin1(cx, arrSource, arrBytes);
-+      JS::UniqueChars arrStr = EncodeLatin1(cx, arrSource);
-       if (!arrStr)
-         return false;
- 
-       JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                                  CTYPESMSG_CONV_ERROR_ARRAY,
--                                 valStr, indexStr, arrStr);
-+                                 valStr, indexStr, arrStr.get());
-       break;
-     }
-     case TYPE_struct: {
-       JSFlatString* name = GetFieldName(arrObj, arrIndex);
-       MOZ_ASSERT(name);
--      JS::UniqueChars nameBytes = JS_EncodeString(cx, name);
--      const char* nameStr = nameBytes.get();
-+      JS::UniqueChars nameStr = JS_EncodeString(cx, name);
-       if (!nameStr)
-         return false;
- 
-       AutoString structSource;
--      JS::UniqueChars structBytes;
-       BuildTypeSource(cx, arrObj, true, structSource);
-       if (!structSource)
-           return false;
--      const char* structStr = EncodeLatin1(cx, structSource, structBytes);
-+      JS::UniqueChars structStr = EncodeLatin1(cx, structSource);
-       if (!structStr)
-         return false;
- 
--      JS::UniqueChars posBytes;
--      const char* posStr;
-+      JS::UniqueChars posStr;
-       if (funObj) {
-         AutoString posSource;
-         BuildConversionPosition(cx, convType, funObj, argIndex, posSource);
-         if (!posSource)
-             return false;
--        posStr = EncodeLatin1(cx, posSource, posBytes);
-+        posStr = EncodeLatin1(cx, posSource);
-         if (!posStr)
-           return false;
--      } else {
--        posStr = "";
-       }
- 
-       JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                                  CTYPESMSG_CONV_ERROR_STRUCT,
--                                 valStr, nameStr, expectedStr, structStr, posStr);
-+                                 valStr, nameStr.get(), expectedStr, structStr.get(),
-+                                 (posStr ? posStr.get() : ""));
-       break;
-     }
-     default:
-       MOZ_CRASH("invalid arrObj value");
-     }
-     return false;
-   }
- 
-   switch (convType) {
-   case ConversionType::Argument: {
-     MOZ_ASSERT(funObj);
- 
-     char indexStr[16];
-     SprintfLiteral(indexStr, "%u", argIndex + 1);
- 
-     AutoString funSource;
--    JS::UniqueChars funBytes;
-     BuildFunctionTypeSource(cx, funObj, funSource);
-     if (!funSource)
-         return false;
--    const char* funStr = EncodeLatin1(cx, funSource, funBytes);
-+    JS::UniqueChars funStr = EncodeLatin1(cx, funSource);
-     if (!funStr)
-       return false;
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                                CTYPESMSG_CONV_ERROR_ARG,
--                               valStr, indexStr, funStr);
-+                               valStr, indexStr, funStr.get());
-     break;
-   }
-   case ConversionType::Finalizer: {
-     MOZ_ASSERT(funObj);
- 
-     AutoString funSource;
--    JS::UniqueChars funBytes;
-     BuildFunctionTypeSource(cx, funObj, funSource);
-     if (!funSource)
-         return false;
--    const char* funStr = EncodeLatin1(cx, funSource, funBytes);
-+    JS::UniqueChars funStr = EncodeLatin1(cx, funSource);
-     if (!funStr)
-       return false;
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
--                               CTYPESMSG_CONV_ERROR_FIN, valStr, funStr);
-+                               CTYPESMSG_CONV_ERROR_FIN, valStr, funStr.get());
-     break;
-   }
-   case ConversionType::Return: {
-     MOZ_ASSERT(funObj);
- 
-     AutoString funSource;
--    JS::UniqueChars funBytes;
-     BuildFunctionTypeSource(cx, funObj, funSource);
-     if (!funSource)
-         return false;
--    const char* funStr = EncodeLatin1(cx, funSource, funBytes);
-+    JS::UniqueChars funStr = EncodeLatin1(cx, funSource);
-     if (!funStr)
-       return false;
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
--                               CTYPESMSG_CONV_ERROR_RET, valStr, funStr);
-+                               CTYPESMSG_CONV_ERROR_RET, valStr, funStr.get());
-     break;
-   }
-   case ConversionType::Setter:
-   case ConversionType::Construct:
-     MOZ_ASSERT(!funObj);
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                                CTYPESMSG_CONV_ERROR_SET, valStr, expectedStr);
-@@ -1322,25 +1313,24 @@ static bool
- ConvError(JSContext* cx, HandleObject expectedType, HandleValue actual,
-           ConversionType convType,
-           HandleObject funObj = nullptr, unsigned argIndex = 0,
-           HandleObject arrObj = nullptr, unsigned arrIndex = 0)
- {
-   MOZ_ASSERT(CType::IsCType(expectedType));
- 
-   AutoString expectedSource;
--  JS::UniqueChars expectedBytes;
-   BuildTypeSource(cx, expectedType, true, expectedSource);
-   if (!expectedSource)
-       return false;
--  const char* expectedStr = EncodeLatin1(cx, expectedSource, expectedBytes);
-+  JS::UniqueChars expectedStr = EncodeLatin1(cx, expectedSource);
-   if (!expectedStr)
-     return false;
- 
--  return ConvError(cx, expectedStr, actual, convType, funObj, argIndex,
-+  return ConvError(cx, expectedStr.get(), actual, convType, funObj, argIndex,
-                    arrObj, arrIndex);
- }
- 
- static bool
- ArgumentConvError(JSContext* cx, HandleValue actual, const char* funStr,
-                   unsigned argIndex)
- {
-   JS::UniqueChars valBytes;
-@@ -1378,27 +1368,26 @@ ArrayLengthMismatch(JSContext* cx, unsig
-     return false;
- 
-   char expectedLengthStr[16];
-   SprintfLiteral(expectedLengthStr, "%u", expectedLength);
-   char actualLengthStr[16];
-   SprintfLiteral(actualLengthStr, "%u", actualLength);
- 
-   AutoString arrSource;
--  JS::UniqueChars arrBytes;
-   BuildTypeSource(cx, arrObj, true, arrSource);
-   if (!arrSource)
-       return false;
--  const char* arrStr = EncodeLatin1(cx, arrSource, arrBytes);
-+  JS::UniqueChars arrStr = EncodeLatin1(cx, arrSource);
-   if (!arrStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_ARRAY_MISMATCH,
--                             valStr, arrStr, expectedLengthStr, actualLengthStr);
-+                             valStr, arrStr.get(), expectedLengthStr, actualLengthStr);
-   return false;
- }
- 
- static bool
- ArrayLengthOverflow(JSContext* cx, unsigned expectedLength, HandleObject arrObj,
-                     unsigned actualLength, HandleValue actual,
-                     ConversionType convType)
- {
-@@ -1410,27 +1399,26 @@ ArrayLengthOverflow(JSContext* cx, unsig
-     return false;
- 
-   char expectedLengthStr[16];
-   SprintfLiteral(expectedLengthStr, "%u", expectedLength);
-   char actualLengthStr[16];
-   SprintfLiteral(actualLengthStr, "%u", actualLength);
- 
-   AutoString arrSource;
--  JS::UniqueChars arrBytes;
-   BuildTypeSource(cx, arrObj, true, arrSource);
-   if (!arrSource)
-       return false;
--  const char* arrStr = EncodeLatin1(cx, arrSource, arrBytes);
-+  JS::UniqueChars arrStr = EncodeLatin1(cx, arrSource);
-   if (!arrStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_ARRAY_OVERFLOW,
--                             valStr, arrStr, expectedLengthStr, actualLengthStr);
-+                             valStr, arrStr.get(), expectedLengthStr, actualLengthStr);
-   return false;
- }
- 
- static bool
- ArgumentRangeMismatch(JSContext* cx, const char* func, const char* range)
- {
-   JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr,
-                             CTYPESMSG_ARG_RANGE_MISMATCH, func, range);
-@@ -1452,54 +1440,50 @@ CannotConstructError(JSContext* cx, cons
-   JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr,
-                             CTYPESMSG_CANNOT_CONSTRUCT, type);
-   return false;
- }
- 
- static bool
- DuplicateFieldError(JSContext* cx, Handle<JSFlatString*> name)
- {
--  JS::UniqueChars nameBytes = JS_EncodeString(cx, name);
--  const char* nameStr = nameBytes.get();
-+  JS::UniqueChars nameStr = JS_EncodeString(cx, name);
-   if (!nameStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
--                             CTYPESMSG_DUPLICATE_FIELD, nameStr);
-+                             CTYPESMSG_DUPLICATE_FIELD, nameStr.get());
-   return false;
- }
- 
- static bool
- EmptyFinalizerCallError(JSContext* cx, const char* funName)
- {
-   JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr,
-                             CTYPESMSG_EMPTY_FIN_CALL, funName);
-   return false;
- }
- 
- static bool
- EmptyFinalizerError(JSContext* cx, ConversionType convType,
-                     HandleObject funObj = nullptr, unsigned argIndex = 0)
- {
--  JS::UniqueChars posBytes;
--  const char* posStr;
-+  JS::UniqueChars posStr;
-   if (funObj) {
-     AutoString posSource;
-     BuildConversionPosition(cx, convType, funObj, argIndex, posSource);
-     if (!posSource)
-         return false;
--    posStr = EncodeLatin1(cx, posSource, posBytes);
-+    posStr = EncodeLatin1(cx, posSource);
-     if (!posStr)
-       return false;
--  } else {
--    posStr = "";
-   }
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
--                             CTYPESMSG_EMPTY_FIN, posStr);
-+                             CTYPESMSG_EMPTY_FIN, (posStr ? posStr.get() : ""));
-   return false;
- }
- 
- static bool
- FieldCountMismatch(JSContext* cx,
-                    unsigned expectedCount, HandleObject structObj,
-                    unsigned actualCount, HandleValue actual,
-                    ConversionType convType,
-@@ -1508,47 +1492,43 @@ FieldCountMismatch(JSContext* cx,
-   MOZ_ASSERT(structObj && CType::IsCType(structObj));
- 
-   JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, actual, valBytes);
-   if (!valStr)
-     return false;
- 
-   AutoString structSource;
--  JS::UniqueChars structBytes;
-   BuildTypeSource(cx, structObj, true, structSource);
-   if (!structSource)
-       return false;
--  const char* structStr = EncodeLatin1(cx, structSource, structBytes);
-+  JS::UniqueChars structStr = EncodeLatin1(cx, structSource);
-   if (!structStr)
-     return false;
- 
-   char expectedCountStr[16];
-   SprintfLiteral(expectedCountStr, "%u", expectedCount);
-   char actualCountStr[16];
-   SprintfLiteral(actualCountStr, "%u", actualCount);
- 
--  JS::UniqueChars posBytes;
--  const char* posStr;
-+  JS::UniqueChars posStr;
-   if (funObj) {
-     AutoString posSource;
-     BuildConversionPosition(cx, convType, funObj, argIndex, posSource);
-     if (!posSource)
-         return false;
--    posStr = EncodeLatin1(cx, posSource, posBytes);
-+    posStr = EncodeLatin1(cx, posSource);
-     if (!posStr)
-       return false;
--  } else {
--    posStr = "";
-   }
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_FIELD_MISMATCH,
--                             valStr, structStr, expectedCountStr, actualCountStr,
--                             posStr);
-+                             valStr, structStr.get(), expectedCountStr, actualCountStr,
-+                             (posStr ? posStr.get() : ""));
-   return false;
- }
- 
- static bool
- FieldDescriptorCountError(JSContext* cx, HandleValue typeVal, size_t length)
- {
-   JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, typeVal, valBytes);
-@@ -1582,23 +1562,22 @@ FieldDescriptorSizeError(JSContext* cx, 
- {
-   RootedValue typeVal(cx, ObjectValue(*typeObj));
-   JS::UniqueChars typeBytes;
-   const char* typeStr = CTypesToSourceForError(cx, typeVal, typeBytes);
-   if (!typeStr)
-     return false;
- 
-   RootedString idStr(cx, IdToString(cx, id));
--  JS::UniqueChars idBytes = JS_EncodeString(cx, idStr);
--  const char* propStr = idBytes.get();
-+  JS::UniqueChars propStr = JS_EncodeString(cx, idStr);
-   if (!propStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
--                             CTYPESMSG_FIELD_DESC_SIZE, typeStr, propStr);
-+                             CTYPESMSG_FIELD_DESC_SIZE, typeStr, propStr.get());
-   return false;
- }
- 
- static bool
- FieldDescriptorNameTypeError(JSContext* cx, HandleValue typeVal)
- {
-   JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, typeVal, valBytes);
-@@ -1614,100 +1593,96 @@ static bool
- FieldDescriptorTypeError(JSContext* cx, HandleValue poroVal, HandleId id)
- {
-   JS::UniqueChars typeBytes;
-   const char* typeStr = CTypesToSourceForError(cx, poroVal, typeBytes);
-   if (!typeStr)
-     return false;
- 
-   RootedString idStr(cx, IdToString(cx, id));
--  JS::UniqueChars idBytes = JS_EncodeString(cx, idStr);
--  const char* propStr = idBytes.get();
-+  JS::UniqueChars propStr = JS_EncodeString(cx, idStr);
-   if (!propStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
--                             CTYPESMSG_FIELD_DESC_TYPE, typeStr, propStr);
-+                             CTYPESMSG_FIELD_DESC_TYPE, typeStr, propStr.get());
-   return false;
- }
- 
- static bool
- FieldMissingError(JSContext* cx, JSObject* typeObj, JSFlatString* name_)
- {
-   JS::UniqueChars typeBytes;
-   RootedString name(cx, name_);
-   RootedValue typeVal(cx, ObjectValue(*typeObj));
-   const char* typeStr = CTypesToSourceForError(cx, typeVal, typeBytes);
-   if (!typeStr)
-     return false;
- 
--  JS::UniqueChars nameBytes = JS_EncodeString(cx, name);
--  const char* nameStr = nameBytes.get();
-+  JS::UniqueChars nameStr = JS_EncodeString(cx, name);
-   if (!nameStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
--                             CTYPESMSG_FIELD_MISSING, typeStr, nameStr);
-+                             CTYPESMSG_FIELD_MISSING, typeStr, nameStr.get());
-   return false;
- }
- 
- static bool
- FinalizerSizeError(JSContext* cx, HandleObject funObj, HandleValue actual)
- {
-   MOZ_ASSERT(CType::IsCType(funObj));
- 
-   JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, actual, valBytes);
-   if (!valStr)
-     return false;
- 
-   AutoString funSource;
--  JS::UniqueChars funBytes;
-   BuildFunctionTypeSource(cx, funObj, funSource);
-   if (!funSource)
-       return false;
--  const char* funStr = EncodeLatin1(cx, funSource, funBytes);
-+  JS::UniqueChars funStr = EncodeLatin1(cx, funSource);
-   if (!funStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
--                             CTYPESMSG_FIN_SIZE_ERROR, funStr, valStr);
-+                             CTYPESMSG_FIN_SIZE_ERROR, funStr.get(), valStr);
-   return false;
- }
- 
- static bool
- FunctionArgumentLengthMismatch(JSContext* cx,
-                                unsigned expectedCount, unsigned actualCount,
-                                HandleObject funObj, HandleObject typeObj,
-                                bool isVariadic)
- {
-   AutoString funSource;
--  JS::UniqueChars funBytes;
-   Value slot = JS_GetReservedSlot(funObj, SLOT_REFERENT);
-   if (!slot.isUndefined() && Library::IsLibrary(&slot.toObject())) {
-     BuildFunctionTypeSource(cx, funObj, funSource);
-   } else {
-     BuildFunctionTypeSource(cx, typeObj, funSource);
-   }
-   if (!funSource)
-       return false;
--  const char* funStr = EncodeLatin1(cx, funSource, funBytes);
-+  JS::UniqueChars funStr = EncodeLatin1(cx, funSource);
-   if (!funStr)
-     return false;
- 
-   char expectedCountStr[16];
-   SprintfLiteral(expectedCountStr, "%u", expectedCount);
-   char actualCountStr[16];
-   SprintfLiteral(actualCountStr, "%u", actualCount);
- 
-   const char* variadicStr = isVariadic ? " or more": "";
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_ARG_COUNT_MISMATCH,
--                             funStr, expectedCountStr, variadicStr,
-+                             funStr.get(), expectedCountStr, variadicStr,
-                              actualCountStr);
-   return false;
- }
- 
- static bool
- FunctionArgumentTypeError(JSContext* cx,
-                           uint32_t index, HandleValue typeVal, const char* reason)
- {
-@@ -1835,26 +1810,25 @@ InvalidIndexRangeError(JSContext* cx, si
- }
- 
- static bool
- NonPrimitiveError(JSContext* cx, HandleObject typeObj)
- {
-   MOZ_ASSERT(CType::IsCType(typeObj));
- 
-   AutoString typeSource;
--  JS::UniqueChars typeBytes;
-   BuildTypeSource(cx, typeObj, true, typeSource);
-   if (!typeSource)
-       return false;
--  const char* typeStr = EncodeLatin1(cx, typeSource, typeBytes);
-+  JS::UniqueChars typeStr = EncodeLatin1(cx, typeSource);
-   if (!typeStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
--                             CTYPESMSG_NON_PRIMITIVE, typeStr);
-+                             CTYPESMSG_NON_PRIMITIVE, typeStr.get());
-   return false;
- }
- 
- static bool
- NonStringBaseError(JSContext* cx, HandleValue thisVal)
- {
-   JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, thisVal, valBytes);
-@@ -1891,32 +1865,30 @@ PropNameNonStringError(JSContext* cx, Ha
-     return false;
- 
-   JS::UniqueChars idBytes;
-   RootedValue idVal(cx, IdToValue(id));
-   const char* propStr = CTypesToSourceForError(cx, idVal, idBytes);
-   if (!propStr)
-     return false;
- 
--  JS::UniqueChars posBytes;
--  const char* posStr;
-+  JS::UniqueChars posStr;
-   if (funObj) {
-     AutoString posSource;
-     BuildConversionPosition(cx, convType, funObj, argIndex, posSource);
-     if (!posSource)
-         return false;
--    posStr = EncodeLatin1(cx, posSource, posBytes);
-+    posStr = EncodeLatin1(cx, posSource);
-     if (!posStr)
-       return false;
--  } else {
--    posStr = "";
-   }
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
--                             CTYPESMSG_PROP_NONSTRING, propStr, valStr, posStr);
-+                             CTYPESMSG_PROP_NONSTRING, propStr, valStr,
-+                             (posStr ? posStr.get() : ""));
-   return false;
- }
- 
- static bool
- SizeOverflow(JSContext* cx, const char* name, const char* limit)
- {
-   JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr,
-                             CTYPESMSG_SIZE_OVERFLOW, name, limit);
-@@ -1948,60 +1920,57 @@ TypeOverflow(JSContext* cx, const char* 
-                              CTYPESMSG_TYPE_OVERFLOW, valStr, expected);
-   return false;
- }
- 
- static bool
- UndefinedSizeCastError(JSContext* cx, HandleObject targetTypeObj)
- {
-   AutoString targetTypeSource;
--  JS::UniqueChars targetTypeBytes;
-   BuildTypeSource(cx, targetTypeObj, true, targetTypeSource);
-   if (!targetTypeSource)
-       return false;
--  const char* targetTypeStr = EncodeLatin1(cx, targetTypeSource, targetTypeBytes);
-+  JS::UniqueChars targetTypeStr = EncodeLatin1(cx, targetTypeSource);
-   if (!targetTypeStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
--                             CTYPESMSG_UNDEFINED_SIZE_CAST, targetTypeStr);
-+                             CTYPESMSG_UNDEFINED_SIZE_CAST, targetTypeStr.get());
-   return false;
- }
- 
- static bool
- SizeMismatchCastError(JSContext* cx,
-                       HandleObject sourceTypeObj, HandleObject targetTypeObj,
-                       size_t sourceSize, size_t targetSize)
- {
-   AutoString sourceTypeSource;
--  JS::UniqueChars sourceTypeBytes;
-   BuildTypeSource(cx, sourceTypeObj, true, sourceTypeSource);
-   if (!sourceTypeSource)
-       return false;
--  const char* sourceTypeStr = EncodeLatin1(cx, sourceTypeSource, sourceTypeBytes);
-+  JS::UniqueChars sourceTypeStr = EncodeLatin1(cx, sourceTypeSource);
-   if (!sourceTypeStr)
-     return false;
- 
-   AutoString targetTypeSource;
--  JS::UniqueChars targetTypeBytes;
-   BuildTypeSource(cx, targetTypeObj, true, targetTypeSource);
-   if (!targetTypeSource)
-       return false;
--  const char* targetTypeStr = EncodeLatin1(cx, targetTypeSource, targetTypeBytes);
-+  JS::UniqueChars targetTypeStr = EncodeLatin1(cx, targetTypeSource);
-   if (!targetTypeStr)
-     return false;
- 
-   char sourceSizeStr[16];
-   char targetSizeStr[16];
-   SprintfLiteral(sourceSizeStr, "%zu", sourceSize);
-   SprintfLiteral(targetSizeStr, "%zu", targetSize);
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_SIZE_MISMATCH_CAST,
--                             targetTypeStr, sourceTypeStr,
-+                             targetTypeStr.get(), sourceTypeStr.get(),
-                              targetSizeStr, sourceSizeStr);
-   return false;
- }
- 
- static bool
- UndefinedSizePointerError(JSContext* cx, const char* action, HandleObject obj)
- {
-   JS::UniqueChars valBytes;
-diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
---- a/js/src/jsfriendapi.cpp
-+++ b/js/src/jsfriendapi.cpp
-@@ -828,19 +828,19 @@ FormatValue(JSContext* cx, const Value& 
-         str = ToString<CanGC>(cx, v);
-     } else {
-         str = ToString<CanGC>(cx, v);
-     }
- 
-     if (!str)
-         return nullptr;
-     bytes = JS_EncodeString(cx, str);
-+    if (!bytes)
-+        return nullptr;
-     const char* buf = bytes.get();
--    if (!buf)
--        return nullptr;
-     const char* found = strstr(buf, "function ");
-     if (found && (found - buf <= 2))
-         return "[function]";
-     return buf;
- }
- 
- // Wrapper for JS_sprintf_append() that reports allocation failure to the
- // context.
-@@ -889,20 +889,19 @@ FormatFrame(JSContext* cx, const FrameIt
-         if (!GetFunctionThis(cx, iter.abstractFramePtr(), &thisVal))
-             return nullptr;
-     }
- 
-     // print the frame number and function name
-     JS::UniqueChars buf(std::move(inBuf));
-     if (funname) {
-         UniqueChars funbytes = JS_EncodeString(cx, funname);
--        char* str = funbytes.get();
--        if (!str)
-+        if (!funbytes)
-             return nullptr;
--        buf = sprintf_append(cx, std::move(buf), "%d %s(", num, str);
-+        buf = sprintf_append(cx, std::move(buf), "%d %s(", num, funbytes.get());
-     } else if (fun) {
-         buf = sprintf_append(cx, std::move(buf), "%d anonymous(", num);
-     } else {
-         buf = sprintf_append(cx, std::move(buf), "%d <TOP LEVEL>", num);
-     }
-     if (!buf)
-         return nullptr;
- 
-@@ -991,20 +990,19 @@ FormatFrame(JSContext* cx, const FrameIt
-             RootedString thisValStr(cx, ToString<CanGC>(cx, thisVal));
-             if (!thisValStr) {
-                 if (cx->isThrowingOutOfMemory())
-                     return nullptr;
-                 cx->clearPendingException();
-             }
-             if (thisValStr) {
-                 thisValBytes = JS_EncodeString(cx, thisValStr);
--                const char* str = thisValBytes.get();
--                if (!str)
-+                if (!thisValBytes)
-                     return nullptr;
--                buf = sprintf_append(cx, std::move(buf), "    this = %s\n", str);
-+                buf = sprintf_append(cx, std::move(buf), "    this = %s\n", thisValBytes.get());
-             } else {
-                 buf = sprintf_append(cx, std::move(buf), "    <failed to get 'this' value>\n");
-             }
-             if (!buf)
-                 return nullptr;
-         }
-     }
- 
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -1609,20 +1609,19 @@ ParseCompileOptions(JSContext* cx, Compi
-         return false;
-     if (v.isNull()) {
-         options.setFile(nullptr);
-     } else if (!v.isUndefined()) {
-         s = ToString(cx, v);
-         if (!s)
-             return false;
-         fileNameBytes = JS_EncodeString(cx, s);
--        char* fileName = fileNameBytes.get();
--        if (!fileName)
--            return false;
--        options.setFile(fileName);
-+        if (!fileNameBytes)
-+            return false;
-+        options.setFile(fileNameBytes.get());
-     }
- 
-     if (!JS_GetProperty(cx, opts, "element", &v))
-         return false;
-     if (v.isObject())
-         options.setElement(&v.toObject());
- 
-     if (!JS_GetProperty(cx, opts, "elementAttributeName", &v))
-@@ -4755,21 +4754,20 @@ BinParse(JSContext* cx, unsigned argc, V
-             stringFormat = optionFormat.toString();
-             JS::Rooted<JSLinearString*> linearFormat(cx);
-             linearFormat = stringFormat->ensureLinear(cx);
-             if (StringEqualsAscii(linearFormat, "multipart")) {
-                 useMultipart = true;
-             } else if (StringEqualsAscii(linearFormat, "simple")) {
-                 useMultipart = false;
-             } else {
--                UniqueChars printable;
-+                UniqueChars printable = ValueToPrintableUTF8(cx, optionFormat);
-                 JS_ReportErrorUTF8(cx,
-                                    "Unknown value for option `format`, expected 'multipart' or "
--                                   "'simple', got %s",
--                                   ValueToPrintableUTF8(cx, optionFormat, &printable));
-+                                   "'simple', got %s", printable.get());
-                 return false;
-             }
-         } else {
-             const char* typeName = InformalValueTypeName(optionFormat);
-             JS_ReportErrorASCII(cx, "option `format` should be a string, got %s", typeName);
-             return false;
-         }
-     }
-diff --git a/js/src/vm/BytecodeUtil.cpp b/js/src/vm/BytecodeUtil.cpp
---- a/js/src/vm/BytecodeUtil.cpp
-+++ b/js/src/vm/BytecodeUtil.cpp
-@@ -1125,67 +1125,63 @@ js::DumpScript(JSContext* cx, JSScript* 
-     if (!sprinter.init())
-         return false;
-     RootedScript script(cx, scriptArg);
-     bool ok = Disassemble(cx, script, true, &sprinter);
-     fprintf(fp, "%s", sprinter.string());
-     return ok;
- }
- 
--static bool
--ToDisassemblySource(JSContext* cx, HandleValue v, UniqueChars* bytes)
-+static UniqueChars
-+ToDisassemblySource(JSContext* cx, HandleValue v)
- {
-     if (v.isString()) {
-         Sprinter sprinter(cx);
-         if (!sprinter.init())
--            return false;
-+            return nullptr;
-         char* nbytes = QuoteString(&sprinter, v.toString(), '"');
-         if (!nbytes)
--            return false;
-+            return nullptr;
-         UniqueChars copy = JS_smprintf("%s", nbytes);
-         if (!copy) {
-             ReportOutOfMemory(cx);
--            return false;
-+            return nullptr;
-         }
--        *bytes = std::move(copy);
--        return true;
-+        return copy;
-     }
- 
-     if (JS::RuntimeHeapIsBusy()) {
-         UniqueChars source = JS_smprintf("<value>");
-         if (!source) {
-             ReportOutOfMemory(cx);
--            return false;
-+            return nullptr;
-         }
--        *bytes = std::move(source);
--        return true;
-+        return source;
-     }
- 
-     if (v.isObject()) {
-         JSObject& obj = v.toObject();
- 
-         if (obj.is<JSFunction>()) {
-             RootedFunction fun(cx, &obj.as<JSFunction>());
-             JSString* str = JS_DecompileFunction(cx, fun);
-             if (!str)
--                return false;
--            *bytes = JS_EncodeString(cx, str);
--            return !!*bytes;
-+                return nullptr;
-+            return JS_EncodeString(cx, str);
-         }
- 
-         if (obj.is<RegExpObject>()) {
-             JSString* source = obj.as<RegExpObject>().toString(cx);
-             if (!source)
--                return false;
--            *bytes = JS_EncodeString(cx, source);
--            return !!*bytes;
-+                return nullptr;
-+            return JS_EncodeString(cx, source);
-         }
-     }
- 
--    return !!ValueToPrintableLatin1(cx, v, bytes, true);
-+    return ValueToPrintableLatin1(cx, v, true);
- }
- 
- static bool
- ToDisassemblySource(JSContext* cx, HandleScope scope, UniqueChars* bytes)
- {
-     UniqueChars source = JS_smprintf("%s {", ScopeKindString(scope->kind()));
-     if (!source) {
-         ReportOutOfMemory(cx);
-@@ -1428,70 +1424,70 @@ Disassemble1(JSContext* cx, HandleScript
-         if (!sp->jsprintf(" %s", bytes.get()))
-             return 0;
-         break;
-       }
- 
-       case JOF_ENVCOORD: {
-         RootedValue v(cx,
-             StringValue(EnvironmentCoordinateName(cx->caches().envCoordinateNameCache, script, pc)));
--        UniqueChars bytes;
--        if (!ToDisassemblySource(cx, v, &bytes))
-+        UniqueChars bytes = ToDisassemblySource(cx, v);
-+        if (!bytes)
-             return 0;
-         EnvironmentCoordinate ec(pc);
-         if (!sp->jsprintf(" %s (hops = %u, slot = %u)", bytes.get(), ec.hops(), ec.slot()))
-             return 0;
-         break;
-       }
- 
-       case JOF_ATOM: {
-         RootedValue v(cx, StringValue(script->getAtom(GET_UINT32_INDEX(pc))));
--        UniqueChars bytes;
--        if (!ToDisassemblySource(cx, v, &bytes))
-+        UniqueChars bytes = ToDisassemblySource(cx, v);
-+        if (!bytes)
-             return 0;
-         if (!sp->jsprintf(" %s", bytes.get()))
-             return 0;
-         break;
-       }
- 
-       case JOF_DOUBLE: {
-         RootedValue v(cx, script->getConst(GET_UINT32_INDEX(pc)));
--        UniqueChars bytes;
--        if (!ToDisassemblySource(cx, v, &bytes))
-+        UniqueChars bytes = ToDisassemblySource(cx, v);
-+        if (!bytes)
-             return 0;
-         if (!sp->jsprintf(" %s", bytes.get()))
-             return 0;
-         break;
-       }
- 
-       case JOF_OBJECT: {
-         /* Don't call obj.toSource if analysis/inference is active. */
-         if (script->zone()->types.activeAnalysis) {
-             if (!sp->jsprintf(" object"))
-                 return 0;
-             break;
-         }
- 
-         JSObject* obj = script->getObject(GET_UINT32_INDEX(pc));
-         {
--            UniqueChars bytes;
-             RootedValue v(cx, ObjectValue(*obj));
--            if (!ToDisassemblySource(cx, v, &bytes))
-+            UniqueChars bytes = ToDisassemblySource(cx, v);
-+            if (!bytes)
-                 return 0;
-             if (!sp->jsprintf(" %s", bytes.get()))
-                 return 0;
-         }
-         break;
-       }
- 
-       case JOF_REGEXP: {
-         js::RegExpObject* obj = script->getRegExp(pc);
--        UniqueChars bytes;
-         RootedValue v(cx, ObjectValue(*obj));
--        if (!ToDisassemblySource(cx, v, &bytes))
-+        UniqueChars bytes = ToDisassemblySource(cx, v);
-+        if (!bytes)
-             return 0;
-         if (!sp->jsprintf(" %s", bytes.get()))
-             return 0;
-         break;
-       }
- 
-       case JOF_TABLESWITCH:
-       {
-diff --git a/js/src/vm/EnvironmentObject.cpp b/js/src/vm/EnvironmentObject.cpp
---- a/js/src/vm/EnvironmentObject.cpp
-+++ b/js/src/vm/EnvironmentObject.cpp
-@@ -1409,18 +1409,17 @@ LiveEnvironmentVal::staticAsserts()
- 
- /*****************************************************************************/
- 
- namespace {
- 
- static void
- ReportOptimizedOut(JSContext* cx, HandleId id)
- {
--    UniqueChars printable;
--    if (ValueToPrintableLatin1(cx, IdToValue(id), &printable)) {
-+    if (UniqueChars printable = ValueToPrintableLatin1(cx, IdToValue(id))) {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_DEBUG_OPTIMIZED_OUT,
-                                    printable.get());
-     }
- }
- 
- /*
-  * DebugEnvironmentProxy is the handler for DebugEnvironmentProxy proxy
-  * objects. Having a custom handler (rather than trying to reuse js::Wrapper)
-diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
---- a/js/src/vm/Interpreter.cpp
-+++ b/js/src/vm/Interpreter.cpp
-@@ -5334,18 +5334,17 @@ js::NewArrayOperationWithTemplate(JSCont
-     return obj;
- }
- 
- void
- js::ReportRuntimeLexicalError(JSContext* cx, unsigned errorNumber, HandleId id)
- {
-     MOZ_ASSERT(errorNumber == JSMSG_UNINITIALIZED_LEXICAL ||
-                errorNumber == JSMSG_BAD_CONST_ASSIGN);
--    UniqueChars printable;
--    if (ValueToPrintableLatin1(cx, IdToValue(id), &printable))
-+    if (UniqueChars printable = ValueToPrintableLatin1(cx, IdToValue(id)))
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber, printable.get());
- }
- 
- void
- js::ReportRuntimeLexicalError(JSContext* cx, unsigned errorNumber, HandlePropertyName name)
- {
-     RootedId id(cx, NameToId(name));
-     ReportRuntimeLexicalError(cx, errorNumber, id);
-diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
---- a/js/src/vm/JSContext.cpp
-+++ b/js/src/vm/JSContext.cpp
-@@ -887,20 +887,18 @@ js::ReportErrorNumberUCArray(JSContext* 
-     ReportError(cx, &report, callback, userRef);
- 
-     return warning;
- }
- 
- void
- js::ReportIsNotDefined(JSContext* cx, HandleId id)
- {
--    UniqueChars printable;
--    if (!ValueToPrintableUTF8(cx, IdToValue(id), &printable))
--        return;
--    JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_NOT_DEFINED, printable.get());
-+    if (UniqueChars printable = ValueToPrintableUTF8(cx, IdToValue(id)))
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_NOT_DEFINED, printable.get());
- }
- 
- void
- js::ReportIsNotDefined(JSContext* cx, HandlePropertyName name)
- {
-     RootedId id(cx, NameToId(name));
-     ReportIsNotDefined(cx, id);
- }
-diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
---- a/js/src/vm/SelfHosting.cpp
-+++ b/js/src/vm/SelfHosting.cpp
-@@ -298,20 +298,17 @@ ThrowErrorWithType(JSContext* cx, JSExnT
-         if (val.isInt32()) {
-             JSString* str = ToString<CanGC>(cx, val);
-             if (!str)
-                 return;
-             errorArgs[i - 1] = JS_EncodeString(cx, str);
-         } else if (val.isString()) {
-             errorArgs[i - 1] = JS_EncodeString(cx, val.toString());
-         } else {
--            UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, val, nullptr);
--            if (!bytes)
--                return;
--            errorArgs[i - 1] = std::move(bytes);
-+            errorArgs[i - 1] = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, val, nullptr);
-         }
-         if (!errorArgs[i - 1])
-             return;
-     }
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber,
-                                errorArgs[0].get(), errorArgs[1].get(), errorArgs[2].get());
- }
-diff --git a/js/src/vm/StringType.cpp b/js/src/vm/StringType.cpp
---- a/js/src/vm/StringType.cpp
-+++ b/js/src/vm/StringType.cpp
-@@ -2057,48 +2057,45 @@ js::EncodeLatin1(JSContext* cx, JSString
-     if (!buf)
-         return nullptr;
- 
-     mozilla::PodCopy(buf, linear->latin1Chars(nogc), len);
-     buf[len] = '\0';
-     return UniqueChars(reinterpret_cast<char*>(buf));
- }
- 
--const char*
--js::ValueToPrintableLatin1(JSContext* cx, const Value& vArg, UniqueChars* bytes,
--                           bool asSource)
-+UniqueChars
-+js::ValueToPrintableLatin1(JSContext* cx, const Value& vArg, bool asSource)
- {
-     RootedValue v(cx, vArg);
-     JSString* str;
-     if (asSource)
-         str = ValueToSource(cx, v);
-     else
-         str = ToString<CanGC>(cx, v);
-     if (!str)
-         return nullptr;
-     str = QuoteString(cx, str, 0);
-     if (!str)
-         return nullptr;
--    *bytes = JS_EncodeString(cx, str);
--    return bytes->get();
-+    return JS_EncodeString(cx, str);
- }
- 
--const char*
--js::ValueToPrintableUTF8(JSContext* cx, const Value& vArg, UniqueChars* bytes, bool asSource)
-+UniqueChars
-+js::ValueToPrintableUTF8(JSContext* cx, const Value& vArg, bool asSource)
- {
-     RootedValue v(cx, vArg);
--    JSString* str;
-+    RootedString str(cx);
-     if (asSource)
--        str = ValueToSource(cx, v);
-+        str.set(ValueToSource(cx, v));
-     else
--        str = ToString<CanGC>(cx, v);
-+        str.set(ToString<CanGC>(cx, v));
-     if (!str)
-         return nullptr;
--    *bytes = JS_EncodeStringToUTF8(cx, RootedString(cx, str));
--    return bytes->get();
-+    return JS_EncodeStringToUTF8(cx, str);
- }
- 
- template <AllowGC allowGC>
- JSString*
- js::ToStringSlow(JSContext* cx, typename MaybeRooted<Value, allowGC>::HandleType arg)
- {
-     /* As with ToObjectSlow, callers must verify that |arg| isn't a string. */
-     MOZ_ASSERT(!arg.isString());
-diff --git a/js/src/vm/StringType.h b/js/src/vm/StringType.h
---- a/js/src/vm/StringType.h
-+++ b/js/src/vm/StringType.h
-@@ -1680,25 +1680,24 @@ EncodeLatin1(JSContext* cx, JSString* st
- /*
-  * Convert a value to a printable C string.
-  *
-  * As the function name implies, any characters in a converted printable string will be Latin1
-  * characters. If there are any non-Latin1 characters in the original value, then those characters
-  * will be changed to Unicode escape sequences(I.e. \udddd, dddd are 4 hex digits) in the printable
-  * string.
-  */
--extern const char*
--ValueToPrintableLatin1(JSContext* cx, const Value&, UniqueChars* bytes,
--                       bool asSource = false);
-+extern UniqueChars
-+ValueToPrintableLatin1(JSContext* cx, const Value&, bool asSource = false);
- 
- /*
-  * Convert a value to a printable C string encoded in UTF-8.
-  */
--extern const char*
--ValueToPrintableUTF8(JSContext* cx, const Value&, UniqueChars* bytes, bool asSource = false);
-+extern UniqueChars
-+ValueToPrintableUTF8(JSContext* cx, const Value&, bool asSource = false);
- 
- /*
-  * Convert a non-string value to a string, returning null after reporting an
-  * error, otherwise returning a new string reference.
-  */
- template <AllowGC allowGC>
- extern JSString*
- ToStringSlow(JSContext* cx, typename MaybeRooted<Value, allowGC>::HandleType arg);

+ 0 - 618
frg/work-js/mozilla-release/patches/mozilla-central-push_435003.patch

@@ -1,618 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536135910 25200
-#      Wed Sep 05 01:25:10 2018 -0700
-# Node ID 21181aea32fa3d7f72ad96dc521c36a37eb2ee58
-# Parent  a7f57108d94f9fc4a3172cd6500e192fd810314f
-Bug 1485066 - Part 6: Reduce char-string-char roundtrips when quoting strings. r=Waldo
-
-diff --git a/js/src/builtin/Object.cpp b/js/src/builtin/Object.cpp
---- a/js/src/builtin/Object.cpp
-+++ b/js/src/builtin/Object.cpp
-@@ -266,17 +266,20 @@ js::ObjectToSource(JSContext* cx, Handle
-             /*
-              * If id is a string that's not an identifier, or if it's a
-              * negative integer, then it must be quoted.
-              */
-             if (JSID_IS_ATOM(id)
-                 ? !IsIdentifier(JSID_TO_ATOM(id))
-                 : JSID_TO_INT(id) < 0)
-             {
--                idstr = QuoteString(cx, idstr, char16_t('\''));
-+                UniqueChars quotedId = QuoteString(cx, idstr, '\'');
-+                if (!quotedId)
-+                    return false;
-+                idstr = NewStringCopyZ<CanGC>(cx, quotedId.get());
-                 if (!idstr)
-                     return false;
-             }
-         }
- 
-         RootedString valsource(cx, ValueToSource(cx, val));
-         if (!valsource)
-             return false;
-diff --git a/js/src/builtin/String.cpp b/js/src/builtin/String.cpp
---- a/js/src/builtin/String.cpp
-+++ b/js/src/builtin/String.cpp
-@@ -609,32 +609,36 @@ IsString(HandleValue v)
-     return v.isString() || (v.isObject() && v.toObject().is<StringObject>());
- }
- 
- MOZ_ALWAYS_INLINE bool
- str_toSource_impl(JSContext* cx, const CallArgs& args)
- {
-     MOZ_ASSERT(IsString(args.thisv()));
- 
--    Rooted<JSString*> str(cx, ToString<CanGC>(cx, args.thisv()));
-+    JSString* str = ToString<CanGC>(cx, args.thisv());
-     if (!str)
-         return false;
- 
--    str = QuoteString(cx, str, '"');
--    if (!str)
-+    UniqueChars quoted = QuoteString(cx, str, '"');
-+    if (!quoted)
-         return false;
- 
-     StringBuffer sb(cx);
--    if (!sb.append("(new String(") || !sb.append(str) || !sb.append("))"))
-+    if (!sb.append("(new String(") ||
-+        !sb.append(quoted.get(), strlen(quoted.get())) ||
-+        !sb.append("))"))
-+    {
-         return false;
--
--    str = sb.finishString();
--    if (!str)
-+    }
-+
-+    JSString* result = sb.finishString();
-+    if (!result)
-         return false;
--    args.rval().setString(str);
-+    args.rval().setString(result);
-     return true;
- }
- 
- static bool
- str_toSource(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     return CallNonGenericMethod<IsString, str_toSource_impl>(cx, args);
-diff --git a/js/src/frontend/NameFunctions.cpp b/js/src/frontend/NameFunctions.cpp
---- a/js/src/frontend/NameFunctions.cpp
-+++ b/js/src/frontend/NameFunctions.cpp
-@@ -45,18 +45,21 @@ class NameResolver
-      * given code like a["b c"], the front end will produce a ParseNodeKind::Dot
-      * with a ParseNodeKind::Name child whose name contains spaces.
-      */
-     bool appendPropertyReference(JSAtom* name) {
-         if (IsIdentifier(name))
-             return buf->append('.') && buf->append(name);
- 
-         /* Quote the string as needed. */
--        JSString* source = QuoteString(cx, name, '"');
--        return source && buf->append('[') && buf->append(source) && buf->append(']');
-+        UniqueChars source = QuoteString(cx, name, '"');
-+        return source &&
-+               buf->append('[') &&
-+               buf->append(source.get(), strlen(source.get())) &&
-+               buf->append(']');
-     }
- 
-     /* Append a number to buf. */
-     bool appendNumber(double n) {
-         char number[30];
-         int digits = SprintfLiteral(number, "%g", n);
-         return buf->append(number, digits);
-     }
-diff --git a/js/src/gc/Statistics.cpp b/js/src/gc/Statistics.cpp
---- a/js/src/gc/Statistics.cpp
-+++ b/js/src/gc/Statistics.cpp
-@@ -568,28 +568,28 @@ UniqueChars
- Statistics::renderJsonSlice(size_t sliceNum) const
- {
-     Sprinter printer(nullptr, false);
-     if (!printer.init())
-         return UniqueChars(nullptr);
-     JSONPrinter json(printer);
- 
-     formatJsonSlice(sliceNum, json);
--    return UniqueChars(printer.release());
-+    return printer.release();
- }
- 
- UniqueChars
- Statistics::renderNurseryJson(JSRuntime* rt) const
- {
-     Sprinter printer(nullptr, false);
-     if (!printer.init())
-         return UniqueChars(nullptr);
-     JSONPrinter json(printer);
-     rt->gc.nursery().renderProfileJSON(json);
--    return UniqueChars(printer.release());
-+    return printer.release();
- }
- 
- #ifdef DEBUG
- void
- Statistics::writeLogMessage(const char* fmt, ...)
- {
-     va_list args;
-     va_start(args, fmt);
-@@ -636,17 +636,17 @@ Statistics::renderJsonMessage(uint64_t t
-     }
- 
-     json.beginObjectProperty("totals"); // #24
-     formatJsonPhaseTimes(phaseTimes, json);
-     json.endObject();
- 
-     json.endObject();
- 
--    return UniqueChars(printer.release());
-+    return printer.release();
- }
- 
- void
- Statistics::formatJsonDescription(uint64_t timestamp, JSONPrinter& json) const
- {
-     // If you change JSON properties here, please update:
-     // Telemetry ping code:
-     //   toolkit/components/telemetry/GCTelemetry.jsm
-diff --git a/js/src/vm/BytecodeUtil.cpp b/js/src/vm/BytecodeUtil.cpp
---- a/js/src/vm/BytecodeUtil.cpp
-+++ b/js/src/vm/BytecodeUtil.cpp
-@@ -1128,39 +1128,21 @@ js::DumpScript(JSContext* cx, JSScript* 
-     bool ok = Disassemble(cx, script, true, &sprinter);
-     fprintf(fp, "%s", sprinter.string());
-     return ok;
- }
- 
- static UniqueChars
- ToDisassemblySource(JSContext* cx, HandleValue v)
- {
--    if (v.isString()) {
--        Sprinter sprinter(cx);
--        if (!sprinter.init())
--            return nullptr;
--        char* nbytes = QuoteString(&sprinter, v.toString(), '"');
--        if (!nbytes)
--            return nullptr;
--        UniqueChars copy = JS_smprintf("%s", nbytes);
--        if (!copy) {
--            ReportOutOfMemory(cx);
--            return nullptr;
--        }
--        return copy;
--    }
--
--    if (JS::RuntimeHeapIsBusy()) {
--        UniqueChars source = JS_smprintf("<value>");
--        if (!source) {
--            ReportOutOfMemory(cx);
--            return nullptr;
--        }
--        return source;
--    }
-+    if (v.isString())
-+        return QuoteString(cx, v.toString(), '"');
-+
-+    if (JS::RuntimeHeapIsBusy())
-+        return DuplicateString(cx, "<value>");
- 
-     if (v.isObject()) {
-         JSObject& obj = v.toObject();
- 
-         if (obj.is<JSFunction>()) {
-             RootedFunction fun(cx, &obj.as<JSFunction>());
-             JSString* str = JS_DecompileFunction(cx, fun);
-             if (!str)
-@@ -1638,17 +1620,17 @@ struct ExpressionDecompiler
- #endif
-     {}
-     bool init();
-     bool decompilePCForStackOperand(jsbytecode* pc, int i);
-     bool decompilePC(jsbytecode* pc, uint8_t defIndex);
-     bool decompilePC(const OffsetAndDefIndex& offsetAndDefIndex);
-     JSAtom* getArg(unsigned slot);
-     JSAtom* loadAtom(jsbytecode* pc);
--    bool quote(JSString* s, uint32_t quote);
-+    bool quote(JSString* s, char quote);
-     bool write(const char* s);
-     bool write(JSString* str);
-     UniqueChars getOutput();
- #if defined(DEBUG) || defined(JS_JITSPEW)
-     void setStackDump() {
-         isStackDump = true;
-     }
- #endif
-@@ -2107,19 +2089,19 @@ bool
- ExpressionDecompiler::write(JSString* str)
- {
-     if (str == cx->names().dotThis)
-         return write("this");
-     return sprinter.putString(str);
- }
- 
- bool
--ExpressionDecompiler::quote(JSString* s, uint32_t quote)
-+ExpressionDecompiler::quote(JSString* s, char quote)
- {
--    return QuoteString(&sprinter, s, quote) != nullptr;
-+    return QuoteString(&sprinter, s, quote);
- }
- 
- JSAtom*
- ExpressionDecompiler::loadAtom(jsbytecode* pc)
- {
-     return script->getAtom(pc);
- }
- 
-diff --git a/js/src/vm/JSAtom.cpp b/js/src/vm/JSAtom.cpp
---- a/js/src/vm/JSAtom.cpp
-+++ b/js/src/vm/JSAtom.cpp
-@@ -114,20 +114,17 @@ js::AtomStateEntry::asPtr(JSContext* cx)
-     if (!cx->helperThread())
-         JSString::readBarrier(atom);
-     return atom;
- }
- 
- UniqueChars
- js::AtomToPrintableString(JSContext* cx, JSAtom* atom)
- {
--    JSString* str = QuoteString(cx, atom, 0);
--    if (!str)
--        return nullptr;
--    return EncodeLatin1(cx, str);
-+    return QuoteString(cx, atom);
- }
- 
- #define DEFINE_PROTO_STRING(name,init,clasp) const char js_##name##_str[] = #name;
- JS_FOR_EACH_PROTOTYPE(DEFINE_PROTO_STRING)
- #undef DEFINE_PROTO_STRING
- 
- #define CONST_CHAR_STR(idpart, id, text) const char js_##idpart##_str[] = text;
- FOR_EACH_COMMON_PROPERTYNAME(CONST_CHAR_STR)
-diff --git a/js/src/vm/Printer.cpp b/js/src/vm/Printer.cpp
---- a/js/src/vm/Printer.cpp
-+++ b/js/src/vm/Printer.cpp
-@@ -142,30 +142,30 @@ Sprinter::init()
- void
- Sprinter::checkInvariants() const
- {
-     MOZ_ASSERT(initialized);
-     MOZ_ASSERT((size_t) offset < size);
-     MOZ_ASSERT(base[size - 1] == 0);
- }
- 
--char*
-+UniqueChars
- Sprinter::release()
- {
-     checkInvariants();
-     if (hadOOM_)
-         return nullptr;
- 
-     char* str = base;
-     base = nullptr;
-     offset = size = 0;
- #ifdef DEBUG
-     initialized = false;
- #endif
--    return str;
-+    return UniqueChars(str);
- }
- 
- char*
- Sprinter::stringAt(ptrdiff_t off) const
- {
-     MOZ_ASSERT(off >= 0 && (size_t) off < size);
-     return base + off;
- }
-@@ -283,27 +283,24 @@ const char js_EscapeMap[] = {
-     '\v', 'v',
-     '"',  '"',
-     '\'', '\'',
-     '\\', '\\',
-     '\0'
- };
- 
- template <typename CharT>
--static char*
--QuoteString(Sprinter* sp, const mozilla::Range<const CharT> chars, char16_t quote)
-+static bool
-+QuoteString(Sprinter* sp, const mozilla::Range<const CharT> chars, char quote)
- {
-     using CharPtr = mozilla::RangedPtr<const CharT>;
- 
--    /* Sample off first for later return value pointer computation. */
--    ptrdiff_t offset = sp->getOffset();
--
-     if (quote) {
--        if (!sp->jsprintf("%c", char(quote)))
--            return nullptr;
-+        if (!sp->putChar(quote))
-+            return false;
-     }
- 
-     const CharPtr end = chars.end();
- 
-     /* Loop control variables: end points at end of string sentinel. */
-     for (CharPtr t = chars.begin(); t < end; ++t) {
-         /* Move t forward from s past un-quote-worthy characters. */
-         const CharPtr s = t;
-@@ -314,83 +311,73 @@ QuoteString(Sprinter* sp, const mozilla:
-                 break;
-             c = *t;
-         }
- 
-         {
-             ptrdiff_t len = t - s;
-             ptrdiff_t base = sp->getOffset();
-             if (!sp->reserve(len))
--                return nullptr;
-+                return false;
- 
-             for (ptrdiff_t i = 0; i < len; ++i)
-                 (*sp)[base + i] = char(s[i]);
-             (*sp)[base + len] = 0;
-         }
- 
-         if (t == end)
-             break;
- 
-         /* Use js_EscapeMap, \u, or \x only if necessary. */
-         const char* escape;
-         if (!(c >> 8) && c != 0 && (escape = strchr(js_EscapeMap, int(c))) != nullptr) {
-             if (!sp->jsprintf("\\%c", escape[1]))
--                return nullptr;
-+                return false;
-         } else {
-             /*
-              * Use \x only if the high byte is 0 and we're in a quoted string,
-              * because ECMA-262 allows only \u, not \x, in Unicode identifiers
-              * (see bug 621814).
-              */
-             if (!sp->jsprintf((quote && !(c >> 8)) ? "\\x%02X" : "\\u%04X", c))
--                return nullptr;
-+                return false;
-         }
-     }
- 
-     /* Sprint the closing quote and return the quoted string. */
-     if (quote) {
--        if (!sp->jsprintf("%c", char(quote)))
--            return nullptr;
-+        if (!sp->putChar(quote))
-+            return false;
-     }
- 
--    /*
--     * If we haven't Sprint'd anything yet, Sprint an empty string so that
--     * the return below gives a valid result.
--     */
--    if (offset == sp->getOffset()) {
--        if (!sp->put(""))
--            return nullptr;
--    }
--
--    return sp->stringAt(offset);
-+    return true;
- }
- 
--char*
--QuoteString(Sprinter* sp, JSString* str, char16_t quote)
-+bool
-+QuoteString(Sprinter* sp, JSString* str, char quote/* = 0*/)
- {
-     JSLinearString* linear = str->ensureLinear(sp->context);
-     if (!linear)
--        return nullptr;
-+        return false;
- 
-     JS::AutoCheckCannotGC nogc;
-     return linear->hasLatin1Chars()
-            ? QuoteString(sp, linear->latin1Range(nogc), quote)
-            : QuoteString(sp, linear->twoByteRange(nogc), quote);
- }
- 
--JSString*
--QuoteString(JSContext* cx, JSString* str, char16_t quote)
-+UniqueChars
-+QuoteString(JSContext* cx, JSString* str, char quote/* = 0*/)
- {
-     Sprinter sprinter(cx);
-     if (!sprinter.init())
-         return nullptr;
--    char* bytes = QuoteString(&sprinter, str, quote);
--    if (!bytes)
-+    if (!QuoteString(&sprinter, str, quote))
-         return nullptr;
--    return NewStringCopyZ<CanGC>(cx, bytes);
-+    return sprinter.release();
- }
- 
- Fprinter::Fprinter(FILE* fp)
-   : file_(nullptr),
-     init_(false)
- {
-     init(fp);
- }
-diff --git a/js/src/vm/Printer.h b/js/src/vm/Printer.h
---- a/js/src/vm/Printer.h
-+++ b/js/src/vm/Printer.h
-@@ -10,16 +10,17 @@
- #include "mozilla/Attributes.h"
- 
- #include <stdarg.h>
- #include <stddef.h>
- #include <stdio.h>
- #include <string.h>
- 
- #include "js/TypeDecls.h"
-+#include "js/Utility.h"
- 
- namespace js {
- 
- class LifoAlloc;
- 
- // Generic printf interface, similar to an ostream in the standard library.
- //
- // This class is useful to make generic printers which can work either with a
-@@ -95,17 +96,17 @@ class Sprinter final : public GenericPri
- 
-     // Initialize this sprinter, returns false on error.
-     MOZ_MUST_USE bool init();
- 
-     void checkInvariants() const;
- 
-     const char* string() const { return base; }
-     const char* stringEnd() const { return base + offset; }
--    char* release();
-+    JS::UniqueChars release();
- 
-     // Returns the string at offset |off|.
-     char* stringAt(ptrdiff_t off) const;
-     // Returns the char at offset |off|.
-     char& operator[](size_t off);
- 
-     // Attempt to reserve len + 1 space (for a trailing nullptr byte). If the
-     // attempt succeeds, return a pointer to the start of that space and adjust the
-@@ -206,21 +207,24 @@ class LSprinter final : public GenericPr
-     // return true on success, false on failure.
-     virtual bool put(const char* s, size_t len) override;
-     using GenericPrinter::put; // pick up |inline bool put(const char* s);|
- };
- 
- // Map escaped code to the letter/symbol escaped with a backslash.
- extern const char       js_EscapeMap[];
- 
--// Return a GC'ed string containing the chars in str, with any non-printing
--// chars or quotes (' or " as specified by the quote argument) escaped, and
--// with the quote character at the beginning and end of the result string.
--extern JSString*
--QuoteString(JSContext* cx, JSString* str, char16_t quote);
-+// Return a C-string containing the chars in str, with any non-printing chars
-+// escaped. If the optional quote parameter is present and is not '\0', quotes
-+// (as specified by the quote argument) are also escaped, and the quote
-+// character is appended at the beginning and end of the result string.
-+// The returned string is guaranteed to contain only ASCII characters.
-+extern JS::UniqueChars
-+QuoteString(JSContext* cx, JSString* str, char quote = 0);
- 
--extern char*
--QuoteString(Sprinter* sp, JSString* str, char16_t quote);
--
-+// Appends the quoted string to the given Sprinter. Follows the same semantics
-+// as QuoteString from above.
-+extern bool
-+QuoteString(Sprinter* sp, JSString* str, char quote = 0);
- 
- } // namespace js
- 
- #endif // vm_Printer_h
-diff --git a/js/src/vm/StringType.cpp b/js/src/vm/StringType.cpp
---- a/js/src/vm/StringType.cpp
-+++ b/js/src/vm/StringType.cpp
-@@ -2068,20 +2068,17 @@ js::ValueToPrintableLatin1(JSContext* cx
-     RootedValue v(cx, vArg);
-     JSString* str;
-     if (asSource)
-         str = ValueToSource(cx, v);
-     else
-         str = ToString<CanGC>(cx, v);
-     if (!str)
-         return nullptr;
--    str = QuoteString(cx, str, 0);
--    if (!str)
--        return nullptr;
--    return EncodeLatin1(cx, str);
-+    return QuoteString(cx, str);
- }
- 
- UniqueChars
- js::ValueToPrintableUTF8(JSContext* cx, const Value& vArg, bool asSource)
- {
-     RootedValue v(cx, vArg);
-     RootedString str(cx);
-     if (asSource)
-@@ -2166,18 +2163,18 @@ SymbolToSource(JSContext* cx, Symbol* sy
-         MOZ_ASSERT(uint32_t(code) < JS::WellKnownSymbolLimit);
-         return desc;
-     }
- 
-     StringBuffer buf(cx);
-     if (code == SymbolCode::InSymbolRegistry ? !buf.append("Symbol.for(") : !buf.append("Symbol("))
-         return nullptr;
-     if (desc) {
--        desc = StringToSource(cx, desc);
--        if (!desc || !buf.append(desc))
-+        UniqueChars quoted = QuoteString(cx, desc, '"');
-+        if (!quoted || !buf.append(quoted.get(), strlen(quoted.get())))
-             return nullptr;
-     }
-     if (!buf.append(')'))
-         return nullptr;
-     return buf.finishString();
- }
- 
- JSString*
-@@ -2216,10 +2213,13 @@ js::ValueToSource(JSContext* cx, HandleV
-     }
- 
-     return ObjectToSource(cx, obj);
- }
- 
- JSString*
- js::StringToSource(JSContext* cx, JSString* str)
- {
--    return QuoteString(cx, str, '"');
-+    UniqueChars chars = QuoteString(cx, str, '"');
-+    if (!chars)
-+        return nullptr;
-+    return NewStringCopyZ<CanGC>(cx, chars.get());
- }
-diff --git a/js/src/vm/UbiNodeCensus.cpp b/js/src/vm/UbiNodeCensus.cpp
---- a/js/src/vm/UbiNodeCensus.cpp
-+++ b/js/src/vm/UbiNodeCensus.cpp
-@@ -5,16 +5,17 @@
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "js/UbiNodeCensus.h"
- 
- #include "js/CharacterEncoding.h"
- #include "js/StableStringChars.h"
- #include "util/Text.h"
- #include "vm/JSContext.h"
-+#include "vm/Printer.h"
- #include "vm/Realm.h"
- 
- #include "vm/JSObject-inl.h"
- #include "vm/NativeObject-inl.h"
- 
- using namespace js;
- 
- namespace JS {
-@@ -1256,21 +1257,17 @@ ParseBreakdown(JSContext* cx, HandleValu
-         CountTypePtr noFilenameType(ParseChildBreakdown(cx, breakdown, cx->names().noFilename));
-         if (!noFilenameType)
-             return nullptr;
- 
-         return CountTypePtr(cx->new_<ByFilename>(std::move(thenType), std::move(noFilenameType)));
-     }
- 
-     // We didn't recognize the breakdown type; complain.
--    RootedString bySource(cx, ValueToSource(cx, byValue));
--    if (!bySource)
--        return nullptr;
--
--    UniqueChars byBytes = JS_EncodeString(cx, bySource);
-+    UniqueChars byBytes = QuoteString(cx, by, '"');
-     if (!byBytes)
-         return nullptr;
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_DEBUG_CENSUS_BREAKDOWN,
-                                byBytes.get());
-     return nullptr;
- }
- 

+ 0 - 1406
frg/work-js/mozilla-release/patches/mozilla-central-push_435005.patch

@@ -1,1406 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536152703 25200
-#      Wed Sep 05 06:05:03 2018 -0700
-# Node ID 9f5767f1b04cb1924e94e530acec5738edfb3e52
-# Parent  b19d4e73e016439dc5446f2bb17a34116086f5ee
-Bug 1485066 - Part 8: Rename JS_EncodeString to JS_EncodeStringToLatin1. r=Waldo
-
-diff --git a/dom/bindings/CallbackInterface.cpp b/dom/bindings/CallbackInterface.cpp
---- a/dom/bindings/CallbackInterface.cpp
-+++ b/dom/bindings/CallbackInterface.cpp
-@@ -17,18 +17,18 @@ bool
- CallbackInterface::GetCallableProperty(JSContext* cx, JS::Handle<jsid> aPropId,
-                                        JS::MutableHandle<JS::Value> aCallable)
- {
-   if (!JS_GetPropertyById(cx, CallbackKnownNotGray(), aPropId, aCallable)) {
-     return false;
-   }
-   if (!aCallable.isObject() ||
-       !JS::IsCallable(&aCallable.toObject())) {
--    JS::UniqueChars propName =
--      JS_EncodeString(cx, JS_FORGET_STRING_FLATNESS(JSID_TO_FLAT_STRING(aPropId)));
-+    JS::RootedString propId(cx, JS_FORGET_STRING_FLATNESS(JSID_TO_FLAT_STRING(aPropId)));
-+    JS::UniqueChars propName = JS_EncodeStringToUTF8(cx, propId);
-     nsPrintfCString description("Property '%s'", propName.get());
-     ThrowErrorMessage(cx, MSG_NOT_CALLABLE, description.get());
-     return false;
-   }
- 
-   return true;
- }
- 
-diff --git a/ipc/testshell/XPCShellEnvironment.cpp b/ipc/testshell/XPCShellEnvironment.cpp
---- a/ipc/testshell/XPCShellEnvironment.cpp
-+++ b/ipc/testshell/XPCShellEnvironment.cpp
-@@ -78,17 +78,17 @@ static bool
- Print(JSContext *cx, unsigned argc, JS::Value *vp)
- {
-     JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
- 
-     for (unsigned i = 0; i < args.length(); i++) {
-         JSString *str = JS::ToString(cx, args[i]);
-         if (!str)
-             return false;
--        JS::UniqueChars bytes = JS_EncodeString(cx, str);
-+        JS::UniqueChars bytes = JS_EncodeStringToLatin1(cx, str);
-         if (!bytes)
-             return false;
-         fprintf(stdout, "%s%s", i ? " " : "", bytes.get());
-         fflush(stdout);
-     }
-     fputc('\n', stdout);
-     args.rval().setUndefined();
-     return true;
-@@ -114,17 +114,17 @@ Dump(JSContext *cx, unsigned argc, JS::V
-     JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
- 
-     if (!args.length())
-         return true;
- 
-     JSString *str = JS::ToString(cx, args[0]);
-     if (!str)
-         return false;
--    JS::UniqueChars bytes = JS_EncodeString(cx, str);
-+    JS::UniqueChars bytes = JS_EncodeStringToLatin1(cx, str);
-     if (!bytes)
-       return false;
- 
-     fputs(bytes.get(), stdout);
-     fflush(stdout);
-     return true;
- }
- 
-@@ -142,17 +142,17 @@ Load(JSContext *cx,
-         JS_ReportErrorASCII(cx, "Trying to load() into a non-global object");
-         return false;
-     }
- 
-     for (unsigned i = 0; i < args.length(); i++) {
-         JS::Rooted<JSString*> str(cx, JS::ToString(cx, args[i]));
-         if (!str)
-             return false;
--        JS::UniqueChars filename = JS_EncodeString(cx, str);
-+        JS::UniqueChars filename = JS_EncodeStringToLatin1(cx, str);
-         if (!filename)
-             return false;
-         FILE *file = fopen(filename.get(), "r");
-         if (!file) {
-             filename = JS_EncodeStringToUTF8(cx, str);
-             if (!filename)
-                 return false;
-             JS_ReportErrorUTF8(cx, "cannot open file '%s' for reading", filename.get());
-@@ -343,17 +343,17 @@ XPCShellEnvironment::ProcessFile(JSConte
- 
-             ok = JS_ExecuteScript(cx, script, &result);
-             if (ok && !result.isUndefined()) {
-                 /* Suppress warnings from JS::ToString(). */
-                 older = JS::SetWarningReporter(cx, nullptr);
-                 str = JS::ToString(cx, result);
-                 JS::UniqueChars bytes;
-                 if (str)
--                    bytes = JS_EncodeString(cx, str);
-+                    bytes = JS_EncodeStringToLatin1(cx, str);
-                 JS::SetWarningReporter(cx, older);
- 
-                 if (!!bytes)
-                     fprintf(stdout, "%s\n", bytes.get());
-                 else
-                     ok = false;
-             }
-         }
-diff --git a/js/public/CharacterEncoding.h b/js/public/CharacterEncoding.h
---- a/js/public/CharacterEncoding.h
-+++ b/js/public/CharacterEncoding.h
-@@ -341,22 +341,22 @@ inline void JS_free(JS::UTF8CharsZ& ptr)
-  *
-  * This function *loses information* when it copies the characters of |str| if
-  * |str| contains code units greater than 0xFF.  Additionally, users that
-  * depend on null-termination will misinterpret the copied characters if |str|
-  * contains any nulls.  Avoid using this function if possible, because it will
-  * eventually be removed.
-  */
- extern JS_PUBLIC_API(JS::UniqueChars)
--JS_EncodeString(JSContext* cx, JSString* str);
-+JS_EncodeStringToLatin1(JSContext* cx, JSString* str);
- 
- /**
-  * DEPRECATED
-  *
-- * Same behavior as JS_EncodeString(), but encode into a UTF-8 string.
-+ * Same behavior as JS_EncodeStringToLatin1(), but encode into a UTF-8 string.
-  *
-  * This function *loses information* when it copies the characters of |str| if
-  * |str| contains invalid UTF-16: U+FFFD REPLACEMENT CHARACTER will be copied
-  * instead.
-  *
-  * The returned string is also subject to misinterpretation if |str| contains
-  * any nulls (which are faithfully transcribed into the returned string, but
-  * which will implicitly truncate the string if it's passed to functions that
-diff --git a/js/src/builtin/Profilers.cpp b/js/src/builtin/Profilers.cpp
---- a/js/src/builtin/Profilers.cpp
-+++ b/js/src/builtin/Profilers.cpp
-@@ -199,17 +199,17 @@ RequiredStringArg(JSContext* cx, const C
-         return nullptr;
-     }
- 
-     if (!args[argi].isString()) {
-         JS_ReportErrorASCII(cx, "%s: invalid arguments (string expected)", caller);
-         return nullptr;
-     }
- 
--    return JS_EncodeString(cx, args[argi].toString());
-+    return JS_EncodeStringToLatin1(cx, args[argi].toString());
- }
- 
- static bool
- StartProfiling(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     if (args.length() == 0) {
-         args.rval().setBoolean(JS_StartProfiling(nullptr, getpid()));
-diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
---- a/js/src/builtin/TestingFunctions.cpp
-+++ b/js/src/builtin/TestingFunctions.cpp
-@@ -2189,17 +2189,17 @@ DumpHeap(JSContext* cx, unsigned argc, V
-         }
-     }
- 
-     if (args.length() > i) {
-         Value v = args[i];
-         if (v.isString()) {
-             if (!fuzzingSafe) {
-                 RootedString str(cx, v.toString());
--                UniqueChars fileNameBytes = JS_EncodeString(cx, str);
-+                UniqueChars fileNameBytes = JS_EncodeStringToLatin1(cx, str);
-                 if (!fileNameBytes)
-                     return false;
-                 dumpFile = fopen(fileNameBytes.get(), "w");
-                 if (!dumpFile) {
-                     fileNameBytes = JS_EncodeStringToUTF8(cx, str);
-                     if (!fileNameBytes)
-                         return false;
-                     JS_ReportErrorUTF8(cx, "can't open %s", fileNameBytes.get());
-@@ -2755,17 +2755,17 @@ class CloneBufferObject : public NativeO
-             uint8_t* dataBytes = nullptr;
-             js::GetArrayBufferLengthAndData(buffer, &nbytes, &isSharedMemory, &dataBytes);
-             MOZ_ASSERT(!isSharedMemory);
-             data = reinterpret_cast<char*>(dataBytes);
-         } else {
-             JSString* str = JS::ToString(cx, args.get(0));
-             if (!str)
-                 return false;
--            dataOwner = JS_EncodeString(cx, str);
-+            dataOwner = JS_EncodeStringToLatin1(cx, str);
-             if (!dataOwner)
-                 return false;
-             data = dataOwner.get();
-             nbytes = JS_GetStringLength(str);
-         }
- 
-         if (nbytes == 0 || (nbytes % sizeof(uint64_t) != 0)) {
-             JS_ReportErrorASCII(cx, "Invalid length for clonebuffer data");
-@@ -4730,17 +4730,17 @@ SetTimeZone(JSContext* cx, unsigned argc
- #if defined(_WIN32)
-         return _putenv_s("TZ", "") == 0;
- #else
-         return unsetenv("TZ") == 0;
- #endif /* _WIN32 */
-     };
- 
-     if (args[0].isString() && !args[0].toString()->empty()) {
--        UniqueChars timeZone = JS_EncodeString(cx, args[0].toString());
-+        UniqueChars timeZone = JS_EncodeStringToLatin1(cx, args[0].toString());
-         if (!timeZone)
-             return false;
- 
-         if (!setTimeZone(timeZone.get())) {
-             JS_ReportErrorASCII(cx, "Failed to set 'TZ' environment variable");
-             return false;
-         }
-     } else {
-@@ -4820,17 +4820,17 @@ SetDefaultLocale(JSContext* cx, unsigned
-                             : containsOnlyValidBCP47Characters(str->twoByteChars(nogc), length);
-         }
- 
-         if (!hasValidChars) {
-             ReportUsageErrorASCII(cx, callee, "First argument should be BCP47 language tag");
-             return false;
-         }
- 
--        UniqueChars locale = JS_EncodeString(cx, str);
-+        UniqueChars locale = JS_EncodeStringToLatin1(cx, str);
-         if (!locale)
-             return false;
- 
-         if (!JS_SetDefaultLocale(cx->runtime(), locale.get())) {
-             ReportOutOfMemory(cx);
-             return false;
-         }
-     } else {
-diff --git a/js/src/ctypes/CTypes.cpp b/js/src/ctypes/CTypes.cpp
---- a/js/src/ctypes/CTypes.cpp
-+++ b/js/src/ctypes/CTypes.cpp
-@@ -980,28 +980,28 @@ GetErrorMessage(void* userRef, const uns
-   if (0 < errorNumber && errorNumber < CTYPESERR_LIMIT)
-     return &ErrorFormatString[errorNumber];
-   return nullptr;
- }
- 
- static JS::UniqueChars
- EncodeLatin1(JSContext* cx, AutoString& str)
- {
--  return JS_EncodeString(cx, NewUCString(cx, str.finish()));
-+  return JS_EncodeStringToLatin1(cx, NewUCString(cx, str.finish()));
- }
- 
- static const char*
- CTypesToSourceForError(JSContext* cx, HandleValue val, JS::UniqueChars& bytes)
- {
-   if (val.isObject()) {
-       RootedObject obj(cx, &val.toObject());
-       if (CType::IsCType(obj) || CData::IsCDataMaybeUnwrap(&obj)) {
-           RootedValue v(cx, ObjectValue(*obj));
-           RootedString str(cx, JS_ValueToSource(cx, v));
--          bytes = JS_EncodeString(cx, str);
-+          bytes = JS_EncodeStringToLatin1(cx, str);
-           return bytes.get();
-       }
-   }
-   return ValueToSourceForError(cx, val, bytes);
- }
- 
- static void
- BuildCStyleFunctionTypeSource(JSContext* cx, HandleObject typeObj,
-@@ -1207,17 +1207,17 @@ ConvError(JSContext* cx, const char* exp
-       JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                                  CTYPESMSG_CONV_ERROR_ARRAY,
-                                  valStr, indexStr, arrStr.get());
-       break;
-     }
-     case TYPE_struct: {
-       JSFlatString* name = GetFieldName(arrObj, arrIndex);
-       MOZ_ASSERT(name);
--      JS::UniqueChars nameStr = JS_EncodeString(cx, name);
-+      JS::UniqueChars nameStr = JS_EncodeStringToLatin1(cx, name);
-       if (!nameStr)
-         return false;
- 
-       AutoString structSource;
-       BuildTypeSource(cx, arrObj, true, structSource);
-       if (!structSource)
-           return false;
-       JS::UniqueChars structStr = EncodeLatin1(cx, structSource);
-@@ -1440,17 +1440,17 @@ CannotConstructError(JSContext* cx, cons
-   JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr,
-                             CTYPESMSG_CANNOT_CONSTRUCT, type);
-   return false;
- }
- 
- static bool
- DuplicateFieldError(JSContext* cx, Handle<JSFlatString*> name)
- {
--  JS::UniqueChars nameStr = JS_EncodeString(cx, name);
-+  JS::UniqueChars nameStr = JS_EncodeStringToLatin1(cx, name);
-   if (!nameStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_DUPLICATE_FIELD, nameStr.get());
-   return false;
- }
- 
-@@ -1562,17 +1562,17 @@ FieldDescriptorSizeError(JSContext* cx, 
- {
-   RootedValue typeVal(cx, ObjectValue(*typeObj));
-   JS::UniqueChars typeBytes;
-   const char* typeStr = CTypesToSourceForError(cx, typeVal, typeBytes);
-   if (!typeStr)
-     return false;
- 
-   RootedString idStr(cx, IdToString(cx, id));
--  JS::UniqueChars propStr = JS_EncodeString(cx, idStr);
-+  JS::UniqueChars propStr = JS_EncodeStringToLatin1(cx, idStr);
-   if (!propStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_FIELD_DESC_SIZE, typeStr, propStr.get());
-   return false;
- }
- 
-@@ -1593,17 +1593,17 @@ static bool
- FieldDescriptorTypeError(JSContext* cx, HandleValue poroVal, HandleId id)
- {
-   JS::UniqueChars typeBytes;
-   const char* typeStr = CTypesToSourceForError(cx, poroVal, typeBytes);
-   if (!typeStr)
-     return false;
- 
-   RootedString idStr(cx, IdToString(cx, id));
--  JS::UniqueChars propStr = JS_EncodeString(cx, idStr);
-+  JS::UniqueChars propStr = JS_EncodeStringToLatin1(cx, idStr);
-   if (!propStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_FIELD_DESC_TYPE, typeStr, propStr.get());
-   return false;
- }
- 
-@@ -1612,17 +1612,17 @@ FieldMissingError(JSContext* cx, JSObjec
- {
-   JS::UniqueChars typeBytes;
-   RootedString name(cx, name_);
-   RootedValue typeVal(cx, ObjectValue(*typeObj));
-   const char* typeStr = CTypesToSourceForError(cx, typeVal, typeBytes);
-   if (!typeStr)
-     return false;
- 
--  JS::UniqueChars nameStr = JS_EncodeString(cx, name);
-+  JS::UniqueChars nameStr = JS_EncodeStringToLatin1(cx, name);
-   if (!nameStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_FIELD_MISSING, typeStr, nameStr.get());
-   return false;
- }
- 
-diff --git a/js/src/ctypes/Library.cpp b/js/src/ctypes/Library.cpp
---- a/js/src/ctypes/Library.cpp
-+++ b/js/src/ctypes/Library.cpp
-@@ -164,22 +164,20 @@ Library::Create(JSContext* cx, HandleVal
- #define MAX_ERROR_LEN 1024
-     char error[MAX_ERROR_LEN] = "Cannot get error from NSPR.";
-     uint32_t errorLen = PR_GetErrorTextLength();
-     if (errorLen && errorLen < MAX_ERROR_LEN)
-       PR_GetErrorText(error);
- #undef MAX_ERROR_LEN
- 
-     if (JS::StringIsASCII(error)) {
--      JS::UniqueChars pathCharsUTF8 = JS_EncodeStringToUTF8(cx, pathStr);
--      if (pathCharsUTF8)
-+      if (JS::UniqueChars pathCharsUTF8 = JS_EncodeStringToUTF8(cx, pathStr))
-         JS_ReportErrorUTF8(cx, "couldn't open library %s: %s", pathCharsUTF8.get(), error);
-     } else {
--      JS::UniqueChars pathCharsLatin1 = JS_EncodeString(cx, pathStr);
--      if (pathCharsLatin1)
-+      if (JS::UniqueChars pathCharsLatin1 = JS_EncodeStringToLatin1(cx, pathStr))
-         JS_ReportErrorLatin1(cx, "couldn't open library %s: %s", pathCharsLatin1.get(), error);
-     }
-     return nullptr;
-   }
- 
-   // stash the library
-   JS_SetReservedSlot(libraryObj, SLOT_LIBRARY, PrivateValue(library));
- 
-diff --git a/js/src/jsapi-tests/tests.h b/js/src/jsapi-tests/tests.h
---- a/js/src/jsapi-tests/tests.h
-+++ b/js/src/jsapi-tests/tests.h
-@@ -98,19 +98,18 @@ class JSAPITest
-     // Like exec(), but doesn't call fail() if JS::Evaluate returns false.
-     bool execDontReport(const char* bytes, const char* filename, int lineno);
- 
- #define EVAL(s, vp) do { if (!evaluate(s, __FILE__, __LINE__, vp)) return false; } while (false)
- 
-     bool evaluate(const char* bytes, const char* filename, int lineno, JS::MutableHandleValue vp);
- 
-     JSAPITestString jsvalToSource(JS::HandleValue v) {
--        JSString* str = JS_ValueToSource(cx, v);
--        if (str) {
--            if (JS::UniqueChars bytes = JS_EncodeString(cx, str))
-+        if (JSString* str = JS_ValueToSource(cx, v)) {
-+            if (JS::UniqueChars bytes = JS_EncodeStringToLatin1(cx, str))
-                 return JSAPITestString(bytes.get());
-         }
-         JS_ClearPendingException(cx);
-         return JSAPITestString("<<error converting value to string>>");
-     }
- 
-     JSAPITestString toSource(long v) {
-         char buf[40];
-@@ -227,17 +226,17 @@ class JSAPITest
- 
-         if (JS_IsExceptionPending(cx)) {
-             js::gc::AutoSuppressGC gcoff(cx);
-             JS::RootedValue v(cx);
-             JS_GetPendingException(cx, &v);
-             JS_ClearPendingException(cx);
-             JSString* s = JS::ToString(cx, v);
-             if (s) {
--                if (JS::UniqueChars bytes = JS_EncodeString(cx, s))
-+                if (JS::UniqueChars bytes = JS_EncodeStringToLatin1(cx, s))
-                     message += bytes.get();
-             }
-         }
- 
-         fprintf(stderr, "%.*s\n", int(message.length()), message.begin());
- 
-         if (msgs.length() != 0)
-             msgs += " | ";
-@@ -266,17 +265,17 @@ class JSAPITest
-     print(JSContext* cx, unsigned argc, JS::Value* vp)
-     {
-         JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
- 
-         for (unsigned i = 0; i < args.length(); i++) {
-             JSString* str = JS::ToString(cx, args[i]);
-             if (!str)
-                 return false;
--            JS::UniqueChars bytes = JS_EncodeString(cx, str);
-+            JS::UniqueChars bytes = JS_EncodeStringToLatin1(cx, str);
-             if (!bytes)
-                 return false;
-             printf("%s%s", i ? " " : "", bytes.get());
-         }
- 
-         putchar('\n');
-         fflush(stdout);
-         args.rval().setUndefined();
-diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
---- a/js/src/jsapi.cpp
-+++ b/js/src/jsapi.cpp
-@@ -6048,17 +6048,17 @@ JS_DecodeBytes(JSContext* cx, const char
-     }
- 
-     CopyAndInflateChars(dst, src, srclen);
-     *dstlenp = srclen;
-     return true;
- }
- 
- JS_PUBLIC_API(JS::UniqueChars)
--JS_EncodeString(JSContext* cx, JSString* str)
-+JS_EncodeStringToLatin1(JSContext* cx, JSString* str)
- {
-     AssertHeapIsIdle();
-     CHECK_THREAD(cx);
- 
-     return js::EncodeLatin1(cx, str);
- }
- 
- JS_PUBLIC_API(JS::UniqueChars)
-diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
---- a/js/src/jsfriendapi.cpp
-+++ b/js/src/jsfriendapi.cpp
-@@ -827,17 +827,17 @@ FormatValue(JSContext* cx, const Value& 
-         AutoRealm ar(cx, &v.toObject());
-         str = ToString<CanGC>(cx, v);
-     } else {
-         str = ToString<CanGC>(cx, v);
-     }
- 
-     if (!str)
-         return nullptr;
--    bytes = JS_EncodeString(cx, str);
-+    bytes = JS_EncodeStringToLatin1(cx, str);
-     if (!bytes)
-         return nullptr;
-     const char* buf = bytes.get();
-     const char* found = strstr(buf, "function ");
-     if (found && (found - buf <= 2))
-         return "[function]";
-     return buf;
- }
-@@ -888,17 +888,17 @@ FormatFrame(JSContext* cx, const FrameIt
-     {
-         if (!GetFunctionThis(cx, iter.abstractFramePtr(), &thisVal))
-             return nullptr;
-     }
- 
-     // print the frame number and function name
-     JS::UniqueChars buf(std::move(inBuf));
-     if (funname) {
--        UniqueChars funbytes = JS_EncodeString(cx, funname);
-+        UniqueChars funbytes = JS_EncodeStringToLatin1(cx, funname);
-         if (!funbytes)
-             return nullptr;
-         buf = sprintf_append(cx, std::move(buf), "%d %s(", num, funbytes.get());
-     } else if (fun) {
-         buf = sprintf_append(cx, std::move(buf), "%d anonymous(", num);
-     } else {
-         buf = sprintf_append(cx, std::move(buf), "%d <TOP LEVEL>", num);
-     }
-@@ -934,17 +934,17 @@ FormatFrame(JSContext* cx, const FrameIt
-             }
- 
-             UniqueChars nameBytes;
-             const char* name = nullptr;
- 
-             if (i < iter.numFormalArgs()) {
-                 MOZ_ASSERT(fi.argumentSlot() == i);
-                 if (!fi.isDestructured()) {
--                    nameBytes = JS_EncodeString(cx, fi.name());
-+                    nameBytes = JS_EncodeStringToLatin1(cx, fi.name());
-                     name = nameBytes.get();
-                     if (!name)
-                         return nullptr;
-                 } else {
-                     name = "(destructured parameter)";
-                 }
-                 fi++;
-             }
-@@ -989,17 +989,17 @@ FormatFrame(JSContext* cx, const FrameIt
-             UniqueChars thisValBytes;
-             RootedString thisValStr(cx, ToString<CanGC>(cx, thisVal));
-             if (!thisValStr) {
-                 if (cx->isThrowingOutOfMemory())
-                     return nullptr;
-                 cx->clearPendingException();
-             }
-             if (thisValStr) {
--                thisValBytes = JS_EncodeString(cx, thisValStr);
-+                thisValBytes = JS_EncodeStringToLatin1(cx, thisValStr);
-                 if (!thisValBytes)
-                     return nullptr;
-                 buf = sprintf_append(cx, std::move(buf), "    this = %s\n", thisValBytes.get());
-             } else {
-                 buf = sprintf_append(cx, std::move(buf), "    <failed to get 'this' value>\n");
-             }
-             if (!buf)
-                 return nullptr;
-diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
---- a/js/src/jsnum.cpp
-+++ b/js/src/jsnum.cpp
-@@ -792,17 +792,17 @@ num_toLocaleString_impl(JSContext* cx, c
-         JS_ReportOutOfMemory(cx);
-         return false;
-     }
- 
-     /*
-      * Create the string, move back to bytes to make string twiddling
-      * a bit easier and so we can insert platform charset seperators.
-      */
--    UniqueChars numBytes = JS_EncodeString(cx, str);
-+    UniqueChars numBytes = JS_EncodeStringToLatin1(cx, str);
-     if (!numBytes)
-         return false;
-     const char* num = numBytes.get();
-     if (!num)
-         return false;
- 
-     /*
-      * Find the first non-integer value, whether it be a letter as in
-diff --git a/js/src/shell/OSObject.cpp b/js/src/shell/OSObject.cpp
---- a/js/src/shell/OSObject.cpp
-+++ b/js/src/shell/OSObject.cpp
-@@ -101,17 +101,17 @@ ResolvePath(JSContext* cx, HandleString 
-     if (!filenameStr) {
- #ifdef XP_WIN
-         return JS_NewStringCopyZ(cx, "nul");
- #else
-         return JS_NewStringCopyZ(cx, "/dev/null");
- #endif
-     }
- 
--    UniqueChars filename = JS_EncodeString(cx, filenameStr);
-+    UniqueChars filename = JS_EncodeStringToLatin1(cx, filenameStr);
-     if (!filename)
-         return nullptr;
- 
-     if (IsAbsolutePath(filename))
-         return filenameStr;
- 
-     JS::AutoFilename scriptFilename;
-     if (resolveMode == ScriptRelative) {
-@@ -153,17 +153,17 @@ ResolvePath(JSContext* cx, HandleString 
-         return nullptr;
- 
-     return JS_NewStringCopyZ(cx, buffer);
- }
- 
- JSObject*
- FileAsTypedArray(JSContext* cx, JS::HandleString pathnameStr)
- {
--    UniqueChars pathname = JS_EncodeString(cx, pathnameStr);
-+    UniqueChars pathname = JS_EncodeStringToLatin1(cx, pathnameStr);
-     if (!pathname)
-         return nullptr;
- 
-     FILE* file = fopen(pathname.get(), "rb");
-     if (!file) {
-         /*
-          * Use Latin1 variant here because the encoding of the return value of
-          * strerror function can be non-UTF-8.
-@@ -314,17 +314,17 @@ osfile_writeTypedArrayToFile(JSContext* 
-         return false;
-     }
- 
-     RootedString givenPath(cx, args[0].toString());
-     RootedString str(cx, ResolvePath(cx, givenPath, RootRelative));
-     if (!str)
-         return false;
- 
--    UniqueChars filename = JS_EncodeString(cx, str);
-+    UniqueChars filename = JS_EncodeStringToLatin1(cx, str);
-     if (!filename)
-         return false;
- 
-     FILE* file = fopen(filename.get(), "wb");
-     if (!file) {
-         /*
-          * Use Latin1 variant here because the encoding of the return value of
-          * strerror function can be non-UTF-8.
-@@ -467,17 +467,17 @@ const js::Class FileObject::class_ = {
- };
- 
- static FileObject*
- redirect(JSContext* cx, HandleString relFilename, RCFile** globalFile)
- {
-     RootedString filename(cx, ResolvePath(cx, relFilename, RootRelative));
-     if (!filename)
-         return nullptr;
--    UniqueChars filenameABS = JS_EncodeString(cx, filename);
-+    UniqueChars filenameABS = JS_EncodeStringToLatin1(cx, filename);
-     if (!filenameABS)
-         return nullptr;
-     RCFile* file = RCFile::create(cx, filenameABS.get(), "wb");
-     if (!file) {
-         /*
-          * Use Latin1 variant here because the encoding of the return value of
-          * strerror function can be non-UTF-8.
-          */
-@@ -631,17 +631,17 @@ ospath_isAbsolute(JSContext* cx, unsigne
-     CallArgs args = CallArgsFromVp(argc, vp);
- 
-     if (args.length() != 1 || !args[0].isString()) {
-         JS_ReportErrorNumberASCII(cx, my_GetErrorMessage, nullptr, JSSMSG_INVALID_ARGS,
-                                   "isAbsolute");
-         return false;
-     }
- 
--    UniqueChars path = JS_EncodeString(cx, args[0].toString());
-+    UniqueChars path = JS_EncodeStringToLatin1(cx, args[0].toString());
-     if (!path)
-         return false;
- 
-     args.rval().setBoolean(IsAbsolutePath(path));
-     return true;
- }
- 
- static bool
-@@ -660,17 +660,17 @@ ospath_join(JSContext* cx, unsigned argc
-     StringBuffer buffer(cx);
- 
-     for (unsigned i = 0; i < args.length(); i++) {
-         if (!args[i].isString()) {
-             JS_ReportErrorASCII(cx, "join expects string arguments only");
-             return false;
-         }
- 
--        UniqueChars path = JS_EncodeString(cx, args[i].toString());
-+        UniqueChars path = JS_EncodeStringToLatin1(cx, args[i].toString());
-         if (!path)
-             return false;
- 
-         if (IsAbsolutePath(path)) {
-             MOZ_ALWAYS_TRUE(buffer.resize(0));
-         } else if (i != 0) {
-             if (!buffer.append(PathSeparator))
-                 return false;
-@@ -790,17 +790,17 @@ os_system(JSContext* cx, unsigned argc, 
-         JS_ReportErrorASCII(cx, "os.system requires 1 argument");
-         return false;
-     }
- 
-     JSString* str = JS::ToString(cx, args[0]);
-     if (!str)
-         return false;
- 
--    UniqueChars command = JS_EncodeString(cx, str);
-+    UniqueChars command = JS_EncodeStringToLatin1(cx, str);
-     if (!command)
-         return false;
- 
-     int result = system(command.get());
-     if (result == -1) {
-         ReportSysError(cx, "system call failed");
-         return false;
-     }
-@@ -819,17 +819,17 @@ os_spawn(JSContext* cx, unsigned argc, V
-         JS_ReportErrorASCII(cx, "os.spawn requires 1 argument");
-         return false;
-     }
- 
-     JSString* str = JS::ToString(cx, args[0]);
-     if (!str)
-         return false;
- 
--    UniqueChars command = JS_EncodeString(cx, str);
-+    UniqueChars command = JS_EncodeStringToLatin1(cx, str);
-     if (!command)
-         return false;
- 
-     int32_t childPid = fork();
-     if (childPid == -1) {
-         ReportSysError(cx, "fork failed");
-         return false;
-     }
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -1358,17 +1358,17 @@ CreateMappedArrayBuffer(JSContext* cx, u
-         return false;
-     // It's a little bizarre to resolve relative to the script, but for testing
-     // I need a file at a known location, and the only good way I know of to do
-     // that right now is to include it in the repo alongside the test script.
-     // Bug 944164 would introduce an alternative.
-     JSString* filenameStr = ResolvePath(cx, rawFilenameStr, ScriptRelative);
-     if (!filenameStr)
-         return false;
--    UniqueChars filename = JS_EncodeString(cx, filenameStr);
-+    UniqueChars filename = JS_EncodeStringToLatin1(cx, filenameStr);
-     if (!filename)
-         return false;
- 
-     uint32_t offset = 0;
-     if (args.length() >= 2) {
-         if (!JS::ToUint32(cx, args[1], &offset))
-             return false;
-     }
-@@ -1548,17 +1548,17 @@ LoadScript(JSContext* cx, unsigned argc,
-                                       "load");
-             return false;
-         }
-         str = ResolvePath(cx, str, scriptRelative ? ScriptRelative : RootRelative);
-         if (!str) {
-             JS_ReportErrorASCII(cx, "unable to resolve path");
-             return false;
-         }
--        UniqueChars filename = JS_EncodeString(cx, str);
-+        UniqueChars filename = JS_EncodeStringToLatin1(cx, str);
-         if (!filename)
-             return false;
-         errno = 0;
-         CompileOptions opts(cx);
-         opts.setIntroductionType("js shell load")
-             .setUTF8(true)
-             .setIsRunOnce(true)
-             .setNoScriptRval(true);
-@@ -1610,17 +1610,17 @@ ParseCompileOptions(JSContext* cx, Compi
-     if (!JS_GetProperty(cx, opts, "fileName", &v))
-         return false;
-     if (v.isNull()) {
-         options.setFile(nullptr);
-     } else if (!v.isUndefined()) {
-         s = ToString(cx, v);
-         if (!s)
-             return false;
--        fileNameBytes = JS_EncodeString(cx, s);
-+        fileNameBytes = JS_EncodeStringToLatin1(cx, s);
-         if (!fileNameBytes)
-             return false;
-         options.setFile(fileNameBytes.get());
-     }
- 
-     if (!JS_GetProperty(cx, opts, "element", &v))
-         return false;
-     if (v.isObject())
-@@ -2093,17 +2093,17 @@ Evaluate(JSContext* cx, unsigned argc, V
-     }
- 
-     return JS_WrapValue(cx, args.rval());
- }
- 
- JSString*
- js::shell::FileAsString(JSContext* cx, JS::HandleString pathnameStr)
- {
--    UniqueChars pathname = JS_EncodeString(cx, pathnameStr);
-+    UniqueChars pathname = JS_EncodeStringToLatin1(cx, pathnameStr);
-     if (!pathname)
-         return nullptr;
- 
-     FILE* file;
- 
-     file = fopen(pathname.get(), "rb");
-     if (!file) {
-         ReportCantOpenErrorUnknownEncoding(cx, pathname.get());
-@@ -2189,17 +2189,17 @@ Run(JSContext* cx, unsigned argc, Value*
- 
-     JS::SourceBufferHolder srcBuf(chars.twoByteRange().begin().get(), str->length(),
-                                   JS::SourceBufferHolder::NoOwnership);
- 
-     RootedScript script(cx);
-     int64_t startClock = PRMJ_Now();
-     {
-         /* FIXME: This should use UTF-8 (bug 987069). */
--        UniqueChars filename = JS_EncodeString(cx, str);
-+        UniqueChars filename = JS_EncodeStringToLatin1(cx, str);
-         if (!filename)
-             return false;
- 
-         JS::CompileOptions options(cx);
-         options.setIntroductionType("js shell run")
-                .setFileAndLine(filename.get(), 1)
-                .setIsRunOnce(true)
-                .setNoScriptRval(true);
-@@ -3147,17 +3147,17 @@ DisassFile(JSContext* cx, unsigned argc,
-         args.rval().setUndefined();
-         return true;
-     }
- 
-     // We should change DisassembleOptionParser to store CallArgs.
-     JSString* str = JS::ToString(cx, HandleValue::fromMarkedLocation(&p.argv[0]));
-     if (!str)
-         return false;
--    UniqueChars filename = JS_EncodeString(cx, str);
-+    UniqueChars filename = JS_EncodeStringToLatin1(cx, str);
-     if (!filename)
-         return false;
-     RootedScript script(cx);
- 
-     {
-         CompileOptions options(cx);
-         options.setIntroductionType("js shell disFile")
-                .setUTF8(true)
-@@ -4371,17 +4371,17 @@ ParseModule(JSContext* cx, unsigned argc
-     if (args.length() > 1) {
-         if (!args[1].isString()) {
-             const char* typeName = InformalValueTypeName(args[1]);
-             JS_ReportErrorASCII(cx, "expected filename string, got %s", typeName);
-             return false;
-         }
- 
-         RootedString str(cx, args[1].toString());
--        filename = JS_EncodeString(cx, str);
-+        filename = JS_EncodeStringToLatin1(cx, str);
-         if (!filename)
-             return false;
- 
-         options.setFileAndLine(filename.get(), 1);
-     } else {
-         options.setFileAndLine("<string>", 1);
-     }
- 
-@@ -5424,17 +5424,17 @@ NestedShell(JSContext* cx, unsigned argc
-             // As a special case, if the caller passes "--js-cache", use
-             // "--js-cache=$(jsCacheDir)" instead.
-             arg = JS_smprintf("--js-cache=%s", jsCacheDir);
-             if (!arg) {
-                 JS_ReportOutOfMemory(cx);
-                 return false;
-             }
-         } else {
--            arg = JS_EncodeString(cx, str);
-+            arg = JS_EncodeStringToLatin1(cx, str);
-             if (!arg)
-                 return false;
-         }
- 
-         if (!argv.append(std::move(arg)))
-             return false;
-     }
- 
-@@ -7155,17 +7155,17 @@ SetARMHwCapFlags(JSContext* cx, unsigned
-         return false;
-     }
- 
-     RootedString flagsListString(cx, JS::ToString(cx, args.get(0)));
-     if (!flagsListString)
-         return false;
- 
- #if defined(JS_CODEGEN_ARM)
--    UniqueChars flagsList = JS_EncodeString(cx, flagsListString);
-+    UniqueChars flagsList = JS_EncodeStringToLatin1(cx, flagsListString);
-     if (!flagsList)
-         return false;
- 
-     jit::ParseARMHwCapFlags(flagsList.get());
- #endif
- 
-     args.rval().setUndefined();
-     return true;
-@@ -9052,17 +9052,17 @@ ProcessArgs(JSContext* cx, OptionParser*
-         RootedString jspath(cx, JS_NewStringCopyZ(cx, path));
-         if (!jspath)
-             return false;
- 
-         JSString* absolutePath = js::shell::ResolvePath(cx, jspath, RootRelative);
-         if (!absolutePath)
-             return false;
- 
--        sc->moduleLoadPath = JS_EncodeString(cx, absolutePath);
-+        sc->moduleLoadPath = JS_EncodeStringToLatin1(cx, absolutePath);
-     } else {
-         sc->moduleLoadPath = js::shell::GetCWD();
-     }
- 
-     if (!sc->moduleLoadPath)
-         return false;
- 
-     if (!modulePaths.empty() && !InitModuleLoader(cx))
-diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp
---- a/js/src/vm/Debugger.cpp
-+++ b/js/src/vm/Debugger.cpp
-@@ -481,17 +481,17 @@ ParseEvalOptions(JSContext* cx, HandleVa
- 
-     RootedValue v(cx);
-     if (!JS_GetProperty(cx, opts, "url", &v))
-         return false;
-     if (!v.isUndefined()) {
-         RootedString url_str(cx, ToString<CanGC>(cx, v));
-         if (!url_str)
-             return false;
--        UniqueChars url_bytes = JS_EncodeString(cx, url_str);
-+        UniqueChars url_bytes = JS_EncodeStringToLatin1(cx, url_str);
-         if (!url_bytes)
-             return false;
-         if (!options.setFilename(cx, url_bytes.get()))
-             return false;
-     }
- 
-     if (!JS_GetProperty(cx, opts, "lineNumber", &v))
-         return false;
-@@ -4562,17 +4562,17 @@ class MOZ_STACK_CLASS Debugger::ScriptQu
-     /*
-      * Given that parseQuery or omittedQuery has been called, prepare to match
-      * scripts. Set urlCString and displayURLChars as appropriate.
-      */
-     bool prepareQuery() {
-         // Compute urlCString and displayURLChars, if a url or displayURL was
-         // given respectively.
-         if (url.isString()) {
--            urlCString = JS_EncodeString(cx, url.toString());
-+            urlCString = JS_EncodeStringToLatin1(cx, url.toString());
-             if (!urlCString)
-                 return false;
-         }
- 
-         return true;
-     }
- 
-     bool delazifyScripts() {
-@@ -4945,17 +4945,17 @@ class MOZ_STACK_CLASS Debugger::ObjectQu
-     UniqueChars classNameCString;
- 
-     /*
-      * Given that either omittedQuery or parseQuery has been called, prepare the
-      * query for matching objects.
-      */
-     bool prepareQuery() {
-         if (className.isString()) {
--            classNameCString = JS_EncodeString(cx, className.toString());
-+            classNameCString = JS_EncodeStringToLatin1(cx, className.toString());
-             if (!classNameCString)
-                 return false;
-         }
- 
-         return true;
-     }
- };
- 
-diff --git a/js/src/vm/ErrorObject.cpp b/js/src/vm/ErrorObject.cpp
---- a/js/src/vm/ErrorObject.cpp
-+++ b/js/src/vm/ErrorObject.cpp
-@@ -140,17 +140,17 @@ js::ErrorObject::getOrCreateErrorReport(
-     // the nitty-gritty malloc stuff.
-     JSErrorReport report;
- 
-     // Type.
-     JSExnType type_ = type();
-     report.exnType = type_;
- 
-     // Filename.
--    UniqueChars filenameStr = JS_EncodeString(cx, fileName(cx));
-+    UniqueChars filenameStr = JS_EncodeStringToLatin1(cx, fileName(cx));
-     if (!filenameStr)
-         return nullptr;
-     report.filename = filenameStr.get();
- 
-     // Coordinates.
-     report.lineno = lineNumber();
-     report.column = columnNumber();
- 
-diff --git a/js/src/vm/Probes.cpp b/js/src/vm/Probes.cpp
---- a/js/src/vm/Probes.cpp
-+++ b/js/src/vm/Probes.cpp
-@@ -35,17 +35,17 @@ ScriptFilename(const JSScript* script)
- 
- static const char*
- FunctionName(JSContext* cx, JSFunction* fun, UniqueChars* bytes)
- {
-     if (!fun)
-         return probes::nullName;
-     if (!fun->displayAtom())
-         return probes::anonymousName;
--    *bytes = JS_EncodeString(cx, fun->displayAtom());
-+    *bytes = JS_EncodeStringToLatin1(cx, fun->displayAtom());
-     return *bytes ? bytes->get() : probes::nullName;
- }
- 
- /*
-  * These functions call the DTrace macros for the JavaScript USDT probes.
-  * Originally this code was inlined in the JavaScript code; however since
-  * a number of operations are called, these have been placed into functions
-  * to reduce any negative compiler optimization effect that the addition of
-diff --git a/js/xpconnect/loader/mozJSComponentLoader.cpp b/js/xpconnect/loader/mozJSComponentLoader.cpp
---- a/js/xpconnect/loader/mozJSComponentLoader.cpp
-+++ b/js/xpconnect/loader/mozJSComponentLoader.cpp
-@@ -1260,17 +1260,17 @@ mozJSComponentLoader::ExtractExports(JSC
-                 return NS_ERROR_FAILURE;
-             return ReportOnCallerUTF8(cxhelper, ERROR_GETTING_SYMBOL,
-                                       aInfo, bytes.get());
-         }
- #ifdef DEBUG
-         if (i == 0) {
-             logBuffer.AssignLiteral("Installing symbols [ ");
-         }
--        JS::UniqueChars bytes = JS_EncodeString(cx, JSID_TO_STRING(symbolId));
-+        JS::UniqueChars bytes = JS_EncodeStringToLatin1(cx, JSID_TO_STRING(symbolId));
-         if (!!bytes)
-             logBuffer.Append(bytes.get());
-         logBuffer.Append(' ');
-         if (i == symbolCount - 1) {
-             nsCString location;
-             MOZ_TRY(aInfo.GetLocation(location));
-             LOG(("%s] from %s\n", logBuffer.get(), location.get()));
-         }
-diff --git a/js/xpconnect/src/Sandbox.cpp b/js/xpconnect/src/Sandbox.cpp
---- a/js/xpconnect/src/Sandbox.cpp
-+++ b/js/xpconnect/src/Sandbox.cpp
-@@ -1539,17 +1539,17 @@ OptionsBase::ParseString(const char* nam
-     if (!found)
-         return true;
- 
-     if (!value.isString()) {
-         JS_ReportErrorASCII(mCx, "Expected a string value for property %s", name);
-         return false;
-     }
- 
--    JS::UniqueChars tmp = JS_EncodeString(mCx, value.toString());
-+    JS::UniqueChars tmp = JS_EncodeStringToLatin1(mCx, value.toString());
-     NS_ENSURE_TRUE(tmp, false);
-     prop.Assign(tmp.get(), strlen(tmp.get()));
-     return true;
- }
- 
- /*
-  * Helper that tries to get a string property from the options object.
-  */
-diff --git a/js/xpconnect/src/XPCComponents.cpp b/js/xpconnect/src/XPCComponents.cpp
---- a/js/xpconnect/src/XPCComponents.cpp
-+++ b/js/xpconnect/src/XPCComponents.cpp
-@@ -242,17 +242,17 @@ nsXPCComponents_Interfaces::Resolve(nsIX
- {
-     RootedObject obj(cx, objArg);
-     RootedId id(cx, idArg);
- 
-     if (!JSID_IS_STRING(id))
-         return NS_OK;
- 
-     RootedString str(cx, JSID_TO_STRING(id));
--    JS::UniqueChars name = JS_EncodeString(cx, str);
-+    JS::UniqueChars name = JS_EncodeStringToLatin1(cx, str);
- 
-     // we only allow interfaces by name here
-     if (name && name[0] != '{') {
-         const nsXPTInterfaceInfo* info = nsXPTInterfaceInfo::ByName(name.get());
-         if (!info)
-             return NS_OK;
- 
-         nsCOMPtr<nsIJSIID> nsid = nsJSIID::NewID(info);
-@@ -621,17 +621,17 @@ nsXPCComponents_Classes::Resolve(nsIXPCo
- 
- {
-     RootedId id(cx, idArg);
-     RootedObject obj(cx, objArg);
- 
-     if (!JSID_IS_STRING(id))
-         return NS_OK;
- 
--    JS::UniqueChars name = JS_EncodeString(cx, JSID_TO_STRING(id));
-+    JS::UniqueChars name = JS_EncodeStringToLatin1(cx, JSID_TO_STRING(id));
-     if (name &&
-         name[0] != '{') { // we only allow contractids here
-         nsCOMPtr<nsIJSCID> nsid = nsJSCID::NewID(name.get());
-         if (nsid) {
-             nsXPConnect* xpc = nsXPConnect::XPConnect();
-             RootedObject idobj(cx);
-             if (NS_SUCCEEDED(xpc->WrapNative(cx, obj,
-                                              static_cast<nsIJSCID*>(nsid),
-@@ -830,17 +830,17 @@ nsXPCComponents_ClassesByID::Resolve(nsI
- {
-     RootedObject obj(cx, objArg);
-     RootedId id(cx, idArg);
- 
-     if (!JSID_IS_STRING(id))
-         return NS_OK;
- 
-     RootedString str(cx, JSID_TO_STRING(id));
--    JS::UniqueChars name = JS_EncodeString(cx, str);
-+    JS::UniqueChars name = JS_EncodeStringToLatin1(cx, str);
-     if (name && name[0] == '{' &&
-         IsRegisteredCLSID(name.get())) // we only allow canonical CLSIDs here
-     {
-         nsCOMPtr<nsIJSCID> nsid = nsJSCID::NewID(name.get());
-         if (nsid) {
-             nsXPConnect* xpc = nsXPConnect::XPConnect();
-             RootedObject idobj(cx);
-             if (NS_SUCCEEDED(xpc->WrapNative(cx, obj,
-@@ -998,17 +998,17 @@ nsXPCComponents_Results::Resolve(nsIXPCo
-                                  jsid idArg, bool* resolvedp,
-                                  bool* _retval)
- {
-     RootedObject obj(cx, objArg);
-     RootedId id(cx, idArg);
-     if (!JSID_IS_STRING(id))
-         return NS_OK;
- 
--    JS::UniqueChars name = JS_EncodeString(cx, JSID_TO_STRING(id));
-+    JS::UniqueChars name = JS_EncodeStringToLatin1(cx, JSID_TO_STRING(id));
-     if (name) {
-         const char* rv_name;
-         const void* iter = nullptr;
-         nsresult rv;
-         while (nsXPCException::IterateNSResults(&rv, &rv_name, nullptr, &iter)) {
-             if (!strcmp(name.get(), rv_name)) {
-                 *resolvedp = true;
-                 if (!JS_DefinePropertyById(cx, obj, id, (uint32_t)rv,
-@@ -1164,17 +1164,17 @@ nsXPCComponents_ID::CallOrConstruct(nsIX
-     }
- 
-     // convert the first argument into a string and see if it looks like an id
- 
-     JSString* jsstr = ToString(cx, args[0]);
-     if (!jsstr)
-         return ThrowAndFail(NS_ERROR_XPC_BAD_ID_STRING, cx, _retval);
- 
--    JS::UniqueChars bytes = JS_EncodeString(cx, jsstr);
-+    JS::UniqueChars bytes = JS_EncodeStringToLatin1(cx, jsstr);
-     if (!bytes)
-         return ThrowAndFail(NS_ERROR_XPC_BAD_ID_STRING, cx, _retval);
- 
-     nsID id;
-     if (!id.Parse(bytes.get()))
-         return ThrowAndFail(NS_ERROR_XPC_BAD_ID_STRING, cx, _retval);
- 
-     // make the new object and return it.
-@@ -1383,17 +1383,17 @@ struct MOZ_STACK_CLASS ExceptionArgParse
-     /*
-      * Parsing helpers.
-      */
- 
-     bool parseMessage(HandleValue v) {
-         JSString* str = ToString(cx, v);
-         if (!str)
-            return false;
--        messageBytes = JS_EncodeString(cx, str);
-+        messageBytes = JS_EncodeStringToLatin1(cx, str);
-         eMsg = messageBytes.get();
-         return !!eMsg;
-     }
- 
-     bool parseResult(HandleValue v) {
-         return JS::ToUint32(cx, v, (uint32_t*) &eResult);
-     }
- 
-@@ -1881,17 +1881,17 @@ nsXPCComponents_Constructor::CallOrConst
-     JS::UniqueChars cInitializerBytes;
- 
-     if (args.length() >= 3) {
-         // args[2] is an initializer function or property name
-         RootedString str(cx, ToString(cx, args[2]));
-         if (!str)
-             return ThrowAndFail(NS_ERROR_XPC_BAD_CONVERT_JS, cx, _retval);
- 
--        cInitializerBytes = JS_EncodeString(cx, str);
-+        cInitializerBytes = JS_EncodeStringToLatin1(cx, str);
-         cInitializer = cInitializerBytes.get();
-         if (!cInitializer)
-             return ThrowAndFail(NS_ERROR_XPC_BAD_CONVERT_JS, cx, _retval);
-     }
- 
-     if (args.length() >= 2) {
-         // args[1] is an iid name string
-         // XXXjband support passing "Components.interfaces.foo"?
-diff --git a/js/xpconnect/src/XPCConvert.cpp b/js/xpconnect/src/XPCConvert.cpp
---- a/js/xpconnect/src/XPCConvert.cpp
-+++ b/js/xpconnect/src/XPCConvert.cpp
-@@ -1346,17 +1346,17 @@ XPCConvert::JSValToXPCException(MutableH
-             // particular info and our 'result' should reflect that.
- 
-             // otherwise we'll just try to convert it to a string
- 
-             JSString* str = ToString(cx, s);
-             if (!str)
-                 return NS_ERROR_FAILURE;
- 
--            JS::UniqueChars strBytes = JS_EncodeString(cx, str);
-+            JS::UniqueChars strBytes = JS_EncodeStringToLatin1(cx, str);
-             if (!strBytes)
-                 return NS_ERROR_FAILURE;
- 
-             return ConstructException(NS_ERROR_XPC_JS_THREW_JS_OBJECT,
-                                       strBytes.get(), ifaceName, methodName,
-                                       nullptr, exceptn, cx, s.address());
-         }
-     }
-@@ -1414,18 +1414,17 @@ XPCConvert::JSValToXPCException(MutableH
-         }
-     }
- 
-     // otherwise we'll just try to convert it to a string
-     // Note: e.g., bools get converted to JSStrings by this code.
- 
-     JSString* str = ToString(cx, s);
-     if (str) {
--        JS::UniqueChars strBytes = JS_EncodeString(cx, str);
--        if (!!strBytes) {
-+        if (JS::UniqueChars strBytes = JS_EncodeStringToLatin1(cx, str)) {
-             return ConstructException(NS_ERROR_XPC_JS_THREW_STRING,
-                                       strBytes.get(), ifaceName, methodName,
-                                       nullptr, exceptn, cx, s.address());
-         }
-     }
-     return NS_ERROR_FAILURE;
- }
- 
-diff --git a/js/xpconnect/src/XPCShellImpl.cpp b/js/xpconnect/src/XPCShellImpl.cpp
---- a/js/xpconnect/src/XPCShellImpl.cpp
-+++ b/js/xpconnect/src/XPCShellImpl.cpp
-@@ -245,17 +245,17 @@ ReadLine(JSContext* cx, unsigned argc, V
-         str = JS::ToString(cx, args[0]);
-         if (!str)
-             return false;
-     } else {
-         str = JS_GetEmptyString(cx);
-     }
- 
-     /* Get a line from the infile */
--    JS::UniqueChars strBytes = JS_EncodeString(cx, str);
-+    JS::UniqueChars strBytes = JS_EncodeStringToLatin1(cx, str);
-     if (!strBytes || !GetLine(cx, buf, gInFile, strBytes.get()))
-         return false;
- 
-     /* Strip newline character added by GetLine() */
-     unsigned int buflen = strlen(buf);
-     if (buflen == 0) {
-         if (feof(gInFile)) {
-             args.rval().setNull();
-@@ -348,17 +348,17 @@ Load(JSContext* cx, unsigned argc, Value
-         return false;
-     }
- 
-     RootedString str(cx);
-     for (unsigned i = 0; i < args.length(); i++) {
-         str = ToString(cx, args[i]);
-         if (!str)
-             return false;
--        JS::UniqueChars filename = JS_EncodeString(cx, str);
-+        JS::UniqueChars filename = JS_EncodeStringToLatin1(cx, str);
-         if (!filename)
-             return false;
-         FILE* file = fopen(filename.get(), "r");
-         if (!file) {
-             filename = JS_EncodeStringToUTF8(cx, str);
-             if (!filename)
-                 return false;
-             JS_ReportErrorUTF8(cx, "cannot open file '%s' for reading",
-@@ -721,17 +721,17 @@ ProcessLine(AutoJSAPI& jsapi, const char
-     if (!JS_ExecuteScript(cx, script, &result))
-         return false;
- 
-     if (result.isUndefined())
-         return true;
-     RootedString str(cx);
-     if (!(str = ToString(cx, result)))
-         return false;
--    JS::UniqueChars bytes = JS_EncodeString(cx, str);
-+    JS::UniqueChars bytes = JS_EncodeStringToLatin1(cx, str);
-     if (!bytes)
-         return false;
- 
-     fprintf(gOutFile, "%s\n", bytes.get());
-     return true;
- }
- 
- static bool
-diff --git a/js/xpconnect/src/XPCThrower.cpp b/js/xpconnect/src/XPCThrower.cpp
---- a/js/xpconnect/src/XPCThrower.cpp
-+++ b/js/xpconnect/src/XPCThrower.cpp
-@@ -162,17 +162,17 @@ XPCThrower::Verbosify(XPCCallContext& cc
-     char* sz = nullptr;
- 
-     if (ccx.HasInterfaceAndMember()) {
-         XPCNativeInterface* iface = ccx.GetInterface();
-         jsid id = ccx.GetMember()->GetName();
-         const char* name;
-         JS::UniqueChars bytes;
-         if (!JSID_IS_VOID(id)) {
--            bytes = JS_EncodeString(ccx, JSID_TO_STRING(id));
-+            bytes = JS_EncodeStringToLatin1(ccx, JSID_TO_STRING(id));
-             name = bytes ? bytes.get() : "";
-         } else {
-             name = "Unknown";
-         }
-         sz = JS_smprintf("%s [%s.%s]", *psz, iface->GetNameString(), name).release();
-     }
- 
-     if (sz) {
-diff --git a/js/xpconnect/src/XPCWrappedNativeJSOps.cpp b/js/xpconnect/src/XPCWrappedNativeJSOps.cpp
---- a/js/xpconnect/src/XPCWrappedNativeJSOps.cpp
-+++ b/js/xpconnect/src/XPCWrappedNativeJSOps.cpp
-@@ -295,17 +295,17 @@ DefinePropertyIfFound(XPCCallContext& cc
-             RootedObject jso(ccx);
-             nsresult rv = NS_OK;
- 
-             bool defineProperty = false;
-             do {
-                 if (!JSID_IS_STRING(id))
-                     break;
- 
--                name = JS_EncodeString(ccx, JSID_TO_STRING(id));
-+                name = JS_EncodeStringToLatin1(ccx, JSID_TO_STRING(id));
-                 if (!name)
-                     break;
- 
-                 iface2 = XPCNativeInterface::GetNewOrUsed(name.get());
-                 if (!iface2)
-                     break;
- 
-                 to = wrapperToReflectInterfaceNames->FindTearOff(iface2, true, &rv);
-diff --git a/toolkit/recordreplay/ipc/JSControl.cpp b/toolkit/recordreplay/ipc/JSControl.cpp
---- a/toolkit/recordreplay/ipc/JSControl.cpp
-+++ b/toolkit/recordreplay/ipc/JSControl.cpp
-@@ -798,17 +798,17 @@ RecordReplay_Dump(JSContext* aCx, unsign
-   // This method is an alternative to dump() that can be used in places where
-   // thread events are disallowed.
-   CallArgs args = CallArgsFromVp(aArgc, aVp);
-   for (size_t i = 0; i < args.length(); i++) {
-     RootedString str(aCx, ToString(aCx, args[i]));
-     if (!str) {
-       return false;
-     }
--    JS::UniqueChars cstr = JS_EncodeString(aCx, str);
-+    JS::UniqueChars cstr = JS_EncodeStringToLatin1(aCx, str);
-     if (!cstr) {
-       return false;
-     }
-     Print("%s", cstr.get());
-   }
- 
-   args.rval().setUndefined();
-   return true;
-diff --git a/tools/fuzzing/messagemanager/MessageManagerFuzzer.cpp b/tools/fuzzing/messagemanager/MessageManagerFuzzer.cpp
---- a/tools/fuzzing/messagemanager/MessageManagerFuzzer.cpp
-+++ b/tools/fuzzing/messagemanager/MessageManagerFuzzer.cpp
-@@ -191,17 +191,18 @@ MessageManagerFuzzer::MutateValue(JSCont
- 
-   if (aValue.isString()) {
-     nsCString x = GetFuzzValueFromFile();
-     if (x.IsEmpty()) {
-       return false;
-     }
-     JSString* str = JS_NewStringCopyZ(aCx, x.get());
-     aOutMutationValue.set(JS::StringValue(str));
--    JS::UniqueChars valueChars = JS_EncodeString(aCx, aValue.toString());
-+    JS::RootedString rootedValue(aCx, aValue.toString());
-+    JS::UniqueChars valueChars = JS_EncodeStringToUTF8(aCx, rootedValue);
-     MSGMGR_FUZZER_LOG("%*s! Mutated value of type |string|: '%s' to '%s'",
-                       aRecursionCounter * 4, "",
-                       valueChars.get(), x.get());
-     return true;
-   }
- 
-   if (aValue.isObject()) {
-     aRecursionCounter++;

+ 0 - 526
frg/work-js/mozilla-release/patches/mozilla-central-push_435007.patch

@@ -1,526 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536135911 25200
-#      Wed Sep 05 01:25:11 2018 -0700
-# Node ID 8fb73b65b5806c37ee76ef859682b735f9b3f588
-# Parent  aa11c398f118ceee4bc586e896b4132186c692b6
-Bug 1485066 - Part 10: Remove ValueToPrintable{Latin1,UTF8}, add IdToPrintableUTF8. r=Waldo
-
-diff --git a/js/src/builtin/TypedObject.cpp b/js/src/builtin/TypedObject.cpp
---- a/js/src/builtin/TypedObject.cpp
-+++ b/js/src/builtin/TypedObject.cpp
-@@ -1985,17 +1985,17 @@ IsOwnId(JSContext* cx, HandleObject obj,
- 
-     return false;
- }
- 
- bool
- TypedObject::obj_deleteProperty(JSContext* cx, HandleObject obj, HandleId id, ObjectOpResult& result)
- {
-     if (IsOwnId(cx, obj, id)) {
--        UniqueChars propName = ValueToPrintableUTF8(cx, IdToValue(id), true);
-+        UniqueChars propName = IdToPrintableUTF8(cx, id, IdToPrintableBehavior::IdIsPropertyKey);
-         if (!propName)
-             return false;
- 
-         JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_CANT_DELETE, propName.get());
-         return false;
-     }
- 
-     RootedObject proto(cx, obj->staticPrototype());
-diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
---- a/js/src/jsapi.cpp
-+++ b/js/src/jsapi.cpp
-@@ -170,22 +170,17 @@ JS::ObjectOpResult::reportStrictErrorOrW
-     unsigned flags = strict ? JSREPORT_ERROR : (JSREPORT_WARNING | JSREPORT_STRICT);
-     if (code_ == JSMSG_OBJECT_NOT_EXTENSIBLE) {
-         RootedValue val(cx, ObjectValue(*obj));
-         return ReportValueErrorFlags(cx, flags, code_, JSDVG_IGNORE_STACK, val,
-                                      nullptr, nullptr, nullptr);
-     }
- 
-     if (ErrorTakesArguments(code_)) {
--        RootedValue idv(cx, IdToValue(id));
--        RootedString str(cx, ValueToSource(cx, idv));
--        if (!str)
--            return false;
--
--        UniqueChars propName = StringToNewUTF8CharsZ(cx, *str);
-+        UniqueChars propName = IdToPrintableUTF8(cx, id, IdToPrintableBehavior::IdIsPropertyKey);
-         if (!propName)
-             return false;
- 
-         if (code_ == JSMSG_SET_NON_OBJECT_RECEIVER) {
-             // We know that the original receiver was a primitive, so unbox it.
-             RootedValue val(cx, ObjectValue(*obj));
-             if (!obj->is<ProxyObject>()) {
-                 if (!Unbox(cx, obj, &val))
-diff --git a/js/src/proxy/Proxy.cpp b/js/src/proxy/Proxy.cpp
---- a/js/src/proxy/Proxy.cpp
-+++ b/js/src/proxy/Proxy.cpp
-@@ -23,39 +23,31 @@
- #include "gc/Marking-inl.h"
- #include "vm/JSAtom-inl.h"
- #include "vm/JSObject-inl.h"
- #include "vm/NativeObject-inl.h"
- 
- using namespace js;
- using namespace js::gc;
- 
--using JS::AutoStableStringChars;
--
- void
- js::AutoEnterPolicy::reportErrorIfExceptionIsNotPending(JSContext* cx, HandleId id)
- {
-     if (JS_IsExceptionPending(cx))
-         return;
- 
-     if (JSID_IS_VOID(id)) {
-         ReportAccessDenied(cx);
-     } else {
--        RootedValue idVal(cx, IdToValue(id));
--        JSString* str = ValueToSource(cx, idVal);
--        if (!str) {
-+        UniqueChars prop = IdToPrintableUTF8(cx, id, IdToPrintableBehavior::IdIsPropertyKey);
-+        if (!prop)
-             return;
--        }
--        AutoStableStringChars chars(cx);
--        const char16_t* prop = nullptr;
--        if (str->ensureFlat(cx) && chars.initTwoByte(cx, str))
--            prop = chars.twoByteChars();
- 
--        JS_ReportErrorNumberUC(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_ACCESS_DENIED,
--                               prop);
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_ACCESS_DENIED,
-+                                 prop.get());
-     }
- }
- 
- #ifdef DEBUG
- void
- js::AutoEnterPolicy::recordEnter(JSContext* cx, HandleObject proxy, HandleId id, Action act)
- {
-     if (allowed()) {
-diff --git a/js/src/proxy/ScriptedProxyHandler.cpp b/js/src/proxy/ScriptedProxyHandler.cpp
---- a/js/src/proxy/ScriptedProxyHandler.cpp
-+++ b/js/src/proxy/ScriptedProxyHandler.cpp
-@@ -886,18 +886,21 @@ ScriptedProxyHandler::delete_(JSContext*
- 
-     // Step 10.
-     Rooted<PropertyDescriptor> desc(cx);
-     if (!GetOwnPropertyDescriptor(cx, target, id, &desc))
-         return false;
- 
-     // Step 12.
-     if (desc.object() && !desc.configurable()) {
--        RootedValue v(cx, IdToValue(id));
--        ReportValueError(cx, JSMSG_CANT_DELETE, JSDVG_IGNORE_STACK, v, nullptr);
-+        UniqueChars bytes = IdToPrintableUTF8(cx, id, IdToPrintableBehavior::IdIsPropertyKey);
-+        if (!bytes)
-+            return false;
-+
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_CANT_DELETE, bytes.get());
-         return false;
-     }
- 
-     // Steps 11,13.
-     return result.succeed();
- }
- 
- // ES8 rev 0c1bd3004329336774cbc90de727cd0cf5f11e93 9.5.7 Proxy.[[HasProperty]](P)
-diff --git a/js/src/proxy/SecurityWrapper.cpp b/js/src/proxy/SecurityWrapper.cpp
---- a/js/src/proxy/SecurityWrapper.cpp
-+++ b/js/src/proxy/SecurityWrapper.cpp
-@@ -108,26 +108,22 @@ SecurityWrapper<Base>::boxedValue_unbox(
- 
- template <class Base>
- bool
- SecurityWrapper<Base>::defineProperty(JSContext* cx, HandleObject wrapper, HandleId id,
-                                       Handle<PropertyDescriptor> desc,
-                                       ObjectOpResult& result) const
- {
-     if (desc.getter() || desc.setter()) {
--        RootedValue idVal(cx, IdToValue(id));
--        JSString* str = ValueToSource(cx, idVal);
--        if (!str)
-+        UniqueChars prop = IdToPrintableUTF8(cx, id, IdToPrintableBehavior::IdIsPropertyKey);
-+        if (!prop)
-             return false;
--        AutoStableStringChars chars(cx);
--        const char16_t* prop = nullptr;
--        if (str->ensureFlat(cx) && chars.initTwoByte(cx, str))
--            prop = chars.twoByteChars();
--        JS_ReportErrorNumberUC(cx, GetErrorMessage, nullptr,
--                               JSMSG_ACCESSOR_DEF_DENIED, prop);
-+
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_ACCESSOR_DEF_DENIED,
-+                                 prop.get());
-         return false;
-     }
- 
-     return Base::defineProperty(cx, wrapper, id, desc, result);
- }
- 
- template class js::SecurityWrapper<Wrapper>;
- template class js::SecurityWrapper<CrossCompartmentWrapper>;
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -4753,17 +4753,20 @@ BinParse(JSContext* cx, unsigned argc, V
-             RootedLinearString linearFormat(cx, optionFormat.toString()->ensureLinear(cx));
-             if (!linearFormat)
-                 return false;
-             if (StringEqualsAscii(linearFormat, "multipart")) {
-                 useMultipart = true;
-             } else if (StringEqualsAscii(linearFormat, "simple")) {
-                 useMultipart = false;
-             } else {
--                UniqueChars printable = ValueToPrintableUTF8(cx, optionFormat);
-+                UniqueChars printable = JS_EncodeStringToUTF8(cx, linearFormat);
-+                if (!printable)
-+                    return false;
-+
-                 JS_ReportErrorUTF8(cx,
-                                    "Unknown value for option `format`, expected 'multipart' or "
-                                    "'simple', got %s", printable.get());
-                 return false;
-             }
-         } else {
-             const char* typeName = InformalValueTypeName(optionFormat);
-             JS_ReportErrorASCII(cx, "option `format` should be a string, got %s", typeName);
-diff --git a/js/src/vm/BytecodeUtil.cpp b/js/src/vm/BytecodeUtil.cpp
---- a/js/src/vm/BytecodeUtil.cpp
-+++ b/js/src/vm/BytecodeUtil.cpp
-@@ -1153,17 +1153,20 @@ ToDisassemblySource(JSContext* cx, Handl
-         if (obj.is<RegExpObject>()) {
-             JSString* source = obj.as<RegExpObject>().toString(cx);
-             if (!source)
-                 return nullptr;
-             return EncodeLatin1(cx, source);
-         }
-     }
- 
--    return ValueToPrintableLatin1(cx, v, true);
-+    JSString* str = ValueToSource(cx, v);
-+    if (!str)
-+        return nullptr;
-+    return QuoteString(cx, str);
- }
- 
- static bool
- ToDisassemblySource(JSContext* cx, HandleScope scope, UniqueChars* bytes)
- {
-     UniqueChars source = JS_smprintf("%s {", ScopeKindString(scope->kind()));
-     if (!source) {
-         ReportOutOfMemory(cx);
-diff --git a/js/src/vm/EnvironmentObject.cpp b/js/src/vm/EnvironmentObject.cpp
---- a/js/src/vm/EnvironmentObject.cpp
-+++ b/js/src/vm/EnvironmentObject.cpp
-@@ -1409,19 +1409,19 @@ LiveEnvironmentVal::staticAsserts()
- 
- /*****************************************************************************/
- 
- namespace {
- 
- static void
- ReportOptimizedOut(JSContext* cx, HandleId id)
- {
--    if (UniqueChars printable = ValueToPrintableLatin1(cx, IdToValue(id))) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_DEBUG_OPTIMIZED_OUT,
--                                   printable.get());
-+    if (UniqueChars printable = IdToPrintableUTF8(cx, id, IdToPrintableBehavior::IdIsIdentifier)) {
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_DEBUG_OPTIMIZED_OUT,
-+                                 printable.get());
-     }
- }
- 
- /*
-  * DebugEnvironmentProxy is the handler for DebugEnvironmentProxy proxy
-  * objects. Having a custom handler (rather than trying to reuse js::Wrapper)
-  * gives us several important abilities:
-  *  - We want to pass the EnvironmentObject as the receiver to forwarded scope
-diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
---- a/js/src/vm/Interpreter.cpp
-+++ b/js/src/vm/Interpreter.cpp
-@@ -5334,18 +5334,18 @@ js::NewArrayOperationWithTemplate(JSCont
-     return obj;
- }
- 
- void
- js::ReportRuntimeLexicalError(JSContext* cx, unsigned errorNumber, HandleId id)
- {
-     MOZ_ASSERT(errorNumber == JSMSG_UNINITIALIZED_LEXICAL ||
-                errorNumber == JSMSG_BAD_CONST_ASSIGN);
--    if (UniqueChars printable = ValueToPrintableLatin1(cx, IdToValue(id)))
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber, printable.get());
-+    if (UniqueChars printable = IdToPrintableUTF8(cx, id, IdToPrintableBehavior::IdIsIdentifier))
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, errorNumber, printable.get());
- }
- 
- void
- js::ReportRuntimeLexicalError(JSContext* cx, unsigned errorNumber, HandlePropertyName name)
- {
-     RootedId id(cx, NameToId(name));
-     ReportRuntimeLexicalError(cx, errorNumber, id);
- }
-diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
---- a/js/src/vm/JSContext.cpp
-+++ b/js/src/vm/JSContext.cpp
-@@ -887,17 +887,17 @@ js::ReportErrorNumberUCArray(JSContext* 
-     ReportError(cx, &report, callback, userRef);
- 
-     return warning;
- }
- 
- void
- js::ReportIsNotDefined(JSContext* cx, HandleId id)
- {
--    if (UniqueChars printable = ValueToPrintableUTF8(cx, IdToValue(id)))
-+    if (UniqueChars printable = IdToPrintableUTF8(cx, id, IdToPrintableBehavior::IdIsIdentifier))
-         JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_NOT_DEFINED, printable.get());
- }
- 
- void
- js::ReportIsNotDefined(JSContext* cx, HandlePropertyName name)
- {
-     RootedId id(cx, NameToId(name));
-     ReportIsNotDefined(cx, id);
-diff --git a/js/src/vm/JSObject.cpp b/js/src/vm/JSObject.cpp
---- a/js/src/vm/JSObject.cpp
-+++ b/js/src/vm/JSObject.cpp
-@@ -252,30 +252,24 @@ GetPropertyIfPresent(JSContext* cx, Hand
- }
- 
- bool
- js::Throw(JSContext* cx, HandleId id, unsigned errorNumber, const char* details)
- {
-     MOZ_ASSERT(js_ErrorFormatString[errorNumber].argCount == (details ? 2 : 1));
-     MOZ_ASSERT_IF(details, JS::StringIsASCII(details));
- 
--    RootedValue idVal(cx, IdToValue(id));
--    JSString* idstr = ValueToSource(cx, idVal);
--    if (!idstr)
--       return false;
--    UniqueChars bytes = EncodeLatin1(cx, idstr);
-+    UniqueChars bytes = IdToPrintableUTF8(cx, id, IdToPrintableBehavior::IdIsPropertyKey);
-     if (!bytes)
-         return false;
- 
--    if (details) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber, bytes.get(),
--                                   details);
--    } else {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber, bytes.get());
--    }
-+    if (details)
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, errorNumber, bytes.get(), details);
-+    else
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, errorNumber, bytes.get());
- 
-     return false;
- }
- 
- 
- /*** PropertyDescriptor operations and DefineProperties ******************************************/
- 
- static const char js_getter_str[] = "getter";
-diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp
---- a/js/src/vm/NativeObject.cpp
-+++ b/js/src/vm/NativeObject.cpp
-@@ -2299,19 +2299,22 @@ GetNonexistentProperty(JSContext* cx, Ha
-     pc += CodeSpec[*pc].length;
-     if (Detecting(cx, script, pc))
-         return true;
- 
-     unsigned flags = JSREPORT_WARNING | JSREPORT_STRICT;
-     script->setWarnedAboutUndefinedProp();
- 
-     // Ok, bad undefined property reference: whine about it.
--    RootedValue val(cx, IdToValue(id));
--    return ReportValueErrorFlags(cx, flags, JSMSG_UNDEFINED_PROP, JSDVG_IGNORE_STACK, val,
--                                    nullptr, nullptr, nullptr);
-+    UniqueChars bytes = IdToPrintableUTF8(cx, id, IdToPrintableBehavior::IdIsPropertyKey);
-+    if (!bytes)
-+        return false;
-+
-+    return JS_ReportErrorFlagsAndNumberUTF8(cx, flags, GetErrorMessage, nullptr,
-+                                            JSMSG_UNDEFINED_PROP, bytes.get());
- }
- 
- /* The NoGC version of GetNonexistentProperty, present only to make types line up. */
- bool
- GetNonexistentProperty(JSContext* cx, const jsid& id, IsNameLookup nameLookup,
-                        FakeMutableHandle<Value> vp)
- {
-     return false;
-@@ -2470,18 +2473,17 @@ MaybeReportUndeclaredVarAssignment(JSCon
-         if (IsStrictSetPC(pc))
-             flags = JSREPORT_ERROR;
-         else if (cx->realm()->behaviors().extraWarnings(cx))
-             flags = JSREPORT_WARNING | JSREPORT_STRICT;
-         else
-             return true;
-     }
- 
--    JSString* propname = JSID_TO_STRING(id);
--    UniqueChars bytes = StringToNewUTF8CharsZ(cx, *propname);
-+    UniqueChars bytes = IdToPrintableUTF8(cx, id, IdToPrintableBehavior::IdIsIdentifier);
-     if (!bytes)
-         return false;
-     return JS_ReportErrorFlagsAndNumberUTF8(cx, flags, GetErrorMessage, nullptr,
-                                             JSMSG_UNDECLARED_VAR, bytes.get());
- }
- 
- /*
-  * Finish assignment to a shapeful data property of a native object obj. This
-diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
---- a/js/src/vm/SelfHosting.cpp
-+++ b/js/src/vm/SelfHosting.cpp
-@@ -2852,18 +2852,22 @@ VerifyGlobalNames(JSContext* cx, Handle<
-                     nameMissing = true;
-                     break;
-                 }
-             }
-         }
-     }
- 
-     if (nameMissing) {
--        RootedValue value(cx, IdToValue(id));
--        ReportValueError(cx, JSMSG_NO_SUCH_SELF_HOSTED_PROP, JSDVG_IGNORE_STACK, value, nullptr);
-+        UniqueChars bytes = IdToPrintableUTF8(cx, id, IdToPrintableBehavior::IdIsPropertyKey);
-+        if (!bytes)
-+            return false;
-+
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_NO_SUCH_SELF_HOSTED_PROP,
-+                                 bytes.get());
-         return false;
-     }
- #endif // DEBUG
- 
-     return true;
- }
- 
- bool
-diff --git a/js/src/vm/StringType.cpp b/js/src/vm/StringType.cpp
---- a/js/src/vm/StringType.cpp
-+++ b/js/src/vm/StringType.cpp
-@@ -12,16 +12,19 @@
- #include "mozilla/MathAlgorithms.h"
- #include "mozilla/MemoryReporting.h"
- #include "mozilla/PodOperations.h"
- #include "mozilla/RangedPtr.h"
- #include "mozilla/TextUtils.h"
- #include "mozilla/TypeTraits.h"
- #include "mozilla/Unused.h"
- 
-+#include "jsfriendapi.h"
-+
-+#include "frontend/BytecodeCompiler.h"
- #include "gc/GCInternals.h"
- #include "gc/Marking.h"
- #include "gc/Nursery.h"
- #include "js/CharacterEncoding.h"
- #include "js/StableStringChars.h"
- #include "js/UbiNode.h"
- #include "util/StringBuffer.h"
- #include "vm/GeckoProfiler.h"
-@@ -2058,40 +2061,31 @@ js::EncodeLatin1(JSContext* cx, JSString
-         return nullptr;
- 
-     mozilla::PodCopy(buf, linear->latin1Chars(nogc), len);
-     buf[len] = '\0';
-     return UniqueChars(reinterpret_cast<char*>(buf));
- }
- 
- UniqueChars
--js::ValueToPrintableLatin1(JSContext* cx, const Value& vArg, bool asSource)
-+js::IdToPrintableUTF8(JSContext* cx, HandleId id, IdToPrintableBehavior behavior)
- {
--    RootedValue v(cx, vArg);
-+    // ToString(<symbol>) throws a TypeError, therefore require that callers
-+    // request source representation when |id| is a property key.
-+    MOZ_ASSERT_IF(behavior == IdToPrintableBehavior::IdIsIdentifier,
-+                  JSID_IS_ATOM(id) && frontend::IsIdentifier(JSID_TO_ATOM(id)));
-+
-+    RootedValue v(cx, IdToValue(id));
-     JSString* str;
--    if (asSource)
-+    if (behavior == IdToPrintableBehavior::IdIsPropertyKey)
-         str = ValueToSource(cx, v);
-     else
-         str = ToString<CanGC>(cx, v);
-     if (!str)
-         return nullptr;
--    return QuoteString(cx, str);
--}
--
--UniqueChars
--js::ValueToPrintableUTF8(JSContext* cx, const Value& vArg, bool asSource)
--{
--    RootedValue v(cx, vArg);
--    RootedString str(cx);
--    if (asSource)
--        str.set(ValueToSource(cx, v));
--    else
--        str.set(ToString<CanGC>(cx, v));
--    if (!str)
--        return nullptr;
-     return StringToNewUTF8CharsZ(cx, *str);
- }
- 
- template <AllowGC allowGC>
- JSString*
- js::ToStringSlow(JSContext* cx, typename MaybeRooted<Value, allowGC>::HandleType arg)
- {
-     /* As with ToObjectSlow, callers must verify that |arg| isn't a string. */
-diff --git a/js/src/vm/StringType.h b/js/src/vm/StringType.h
---- a/js/src/vm/StringType.h
-+++ b/js/src/vm/StringType.h
-@@ -1672,32 +1672,33 @@ SubstringKernel(JSContext* cx, HandleStr
- /*** Conversions *********************************************************************************/
- 
- /*
-  * Convert a string to a printable C string.
-  */
- UniqueChars
- EncodeLatin1(JSContext* cx, JSString* str);
- 
-+enum class IdToPrintableBehavior : bool {
-+    /*
-+     * Request the printable representation of an identifier.
-+     */
-+    IdIsIdentifier,
-+
-+    /*
-+     * Request the printable representation of a property key.
-+     */
-+    IdIsPropertyKey
-+};
-+
- /*
-- * Convert a value to a printable C string.
-- *
-- * As the function name implies, any characters in a converted printable string will be Latin1
-- * characters. If there are any non-Latin1 characters in the original value, then those characters
-- * will be changed to Unicode escape sequences(I.e. \udddd, dddd are 4 hex digits) in the printable
-- * string.
-+ * Convert a jsid to a printable C string encoded in UTF-8.
-  */
- extern UniqueChars
--ValueToPrintableLatin1(JSContext* cx, const Value&, bool asSource = false);
--
--/*
-- * Convert a value to a printable C string encoded in UTF-8.
-- */
--extern UniqueChars
--ValueToPrintableUTF8(JSContext* cx, const Value&, bool asSource = false);
-+IdToPrintableUTF8(JSContext* cx, HandleId id, IdToPrintableBehavior behavior);
- 
- /*
-  * Convert a non-string value to a string, returning null after reporting an
-  * error, otherwise returning a new string reference.
-  */
- template <AllowGC allowGC>
- extern JSString*
- ToStringSlow(JSContext* cx, typename MaybeRooted<Value, allowGC>::HandleType arg);

+ 0 - 537
frg/work-js/mozilla-release/patches/mozilla-central-push_435009.patch

@@ -1,537 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536135912 25200
-#      Wed Sep 05 01:25:12 2018 -0700
-# Node ID eb37a9c0cff43121655fa7a8a42bf4ec171cf848
-# Parent  e13b67ae85248f2ce726cf815a561ec0936db732
-Bug 1485066 - Part 12: Change the decompiler to return UTF-8 encoded strings. r=Waldo
-
-diff --git a/js/public/CharacterEncoding.h b/js/public/CharacterEncoding.h
---- a/js/public/CharacterEncoding.h
-+++ b/js/public/CharacterEncoding.h
-@@ -112,17 +112,17 @@ class UTF8CharsZ : public mozilla::Range
- 
-     char* c_str() { return reinterpret_cast<char*>(get()); }
- };
- 
- /*
-  * A wrapper for a "const char*" that is encoded using UTF-8.
-  * This class does not manage ownership of the data; that is left
-  * to others.  This differs from UTF8CharsZ in that the chars are
-- * const and it allows assignment.
-+ * const and it disallows assignment.
-  */
- class JS_PUBLIC_API(ConstUTF8CharsZ)
- {
-     const char* data_;
- 
-   public:
-     using CharT = unsigned char;
- 
-diff --git a/js/src/builtin/Object.cpp b/js/src/builtin/Object.cpp
---- a/js/src/builtin/Object.cpp
-+++ b/js/src/builtin/Object.cpp
-@@ -1052,18 +1052,18 @@ js::obj_create(JSContext* cx, unsigned a
-         return false;
-     }
- 
-     if (!args[0].isObjectOrNull()) {
-         UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, args[0], nullptr);
-         if (!bytes)
-             return false;
- 
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_UNEXPECTED_TYPE,
--                                   bytes.get(), "not an object or null");
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_UNEXPECTED_TYPE,
-+                                 bytes.get(), "not an object or null");
-         return false;
-     }
- 
-     // Step 2.
-     RootedObject proto(cx, args[0].toObjectOrNull());
-     RootedPlainObject obj(cx, ObjectCreateImpl(cx, proto));
-     if (!obj)
-         return false;
-diff --git a/js/src/builtin/Stream.cpp b/js/src/builtin/Stream.cpp
---- a/js/src/builtin/Stream.cpp
-+++ b/js/src/builtin/Stream.cpp
-@@ -272,18 +272,18 @@ PromiseRejectedWithPendingError(JSContex
- 
- static void
- ReportArgTypeError(JSContext* cx, const char* funName, const char* expectedType, HandleValue arg)
- {
-     UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, arg, nullptr);
-     if (!bytes)
-         return;
- 
--    JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_NOT_EXPECTED_TYPE, funName,
--                               expectedType, bytes.get());
-+    JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_NOT_EXPECTED_TYPE, funName,
-+                             expectedType, bytes.get());
- }
- 
- static MOZ_MUST_USE bool
- RejectWithPendingError(JSContext* cx, Handle<PromiseObject*> promise) {
-     // Not much we can do about uncatchable exceptions, just bail.
-     RootedValue exn(cx);
-     if (!GetAndClearException(cx, &exn))
-         return false;
-diff --git a/js/src/perf/jsperf.cpp b/js/src/perf/jsperf.cpp
---- a/js/src/perf/jsperf.cpp
-+++ b/js/src/perf/jsperf.cpp
-@@ -218,17 +218,17 @@ pm_finalize(JSFreeOp* fop, JSObject* obj
- 
- static PerfMeasurement*
- GetPM(JSContext* cx, JS::HandleValue value, const char* fname)
- {
-     if (!value.isObject()) {
-         UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, value, nullptr);
-         if (!bytes)
-             return nullptr;
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, 0, JSMSG_NOT_NONNULL_OBJECT, bytes.get());
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, 0, JSMSG_NOT_NONNULL_OBJECT, bytes.get());
-         return nullptr;
-     }
-     RootedObject obj(cx, &value.toObject());
-     PerfMeasurement* p = (PerfMeasurement*)
-         JS_GetInstancePrivate(cx, obj, &pm_class, nullptr);
-     if (p)
-         return p;
- 
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -3095,17 +3095,18 @@ DisassembleToString(JSContext* cx, unsig
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     Sprinter sprinter(cx);
-     if (!sprinter.init())
-         return false;
-     if (!DisassembleToSprinter(cx, args.length(), vp, &sprinter))
-         return false;
- 
--    JSString* str = JS_NewStringCopyZ(cx, sprinter.string());
-+    JS::ConstUTF8CharsZ utf8chars(sprinter.string(), strlen(sprinter.string()));
-+    JSString* str = JS_NewStringCopyUTF8Z(cx, utf8chars);
-     if (!str)
-         return false;
-     args.rval().setString(str);
-     return true;
- }
- 
- static bool
- Disassemble(JSContext* cx, unsigned argc, Value* vp)
-diff --git a/js/src/vm/BytecodeUtil.cpp b/js/src/vm/BytecodeUtil.cpp
---- a/js/src/vm/BytecodeUtil.cpp
-+++ b/js/src/vm/BytecodeUtil.cpp
-@@ -1142,24 +1142,24 @@ ToDisassemblySource(JSContext* cx, Handl
-     if (v.isObject()) {
-         JSObject& obj = v.toObject();
- 
-         if (obj.is<JSFunction>()) {
-             RootedFunction fun(cx, &obj.as<JSFunction>());
-             JSString* str = JS_DecompileFunction(cx, fun);
-             if (!str)
-                 return nullptr;
--            return EncodeLatin1(cx, str);
-+            return StringToNewUTF8CharsZ(cx, *str);
-         }
- 
-         if (obj.is<RegExpObject>()) {
-             JSString* source = obj.as<RegExpObject>().toString(cx);
-             if (!source)
-                 return nullptr;
--            return EncodeLatin1(cx, source);
-+            return StringToNewUTF8CharsZ(cx, *source);
-         }
-     }
- 
-     JSString* str = ValueToSource(cx, v);
-     if (!str)
-         return nullptr;
-     return QuoteString(cx, str);
- }
-@@ -2294,17 +2294,17 @@ js::DecompileValueGenerator(JSContext* c
-     if (!fallback) {
-         if (v.isUndefined())
-             return DuplicateString(cx, js_undefined_str); // Prevent users from seeing "(void 0)"
-         fallback = ValueToSource(cx, v);
-         if (!fallback)
-             return nullptr;
-     }
- 
--    return EncodeLatin1(cx, fallback);
-+    return StringToNewUTF8CharsZ(cx, *fallback);
- }
- 
- static bool
- DecompileArgumentFromStack(JSContext* cx, int formalIndex, UniqueChars* res)
- {
-     MOZ_ASSERT(formalIndex >= 0);
- 
-     *res = nullptr;
-@@ -2374,18 +2374,20 @@ DecompileArgumentFromStack(JSContext* cx
- 
- JSString*
- js::DecompileArgument(JSContext* cx, int formalIndex, HandleValue v)
- {
-     {
-         UniqueChars result;
-         if (!DecompileArgumentFromStack(cx, formalIndex, &result))
-             return nullptr;
--        if (result && strcmp(result.get(), "(intermediate value)"))
--            return NewStringCopyZ<CanGC>(cx, result.get());
-+        if (result && strcmp(result.get(), "(intermediate value)")) {
-+            JS::ConstUTF8CharsZ utf8chars(result.get(), strlen(result.get()));
-+            return NewStringCopyUTF8Z<CanGC>(cx, utf8chars);
-+        }
-     }
-     if (v.isUndefined())
-         return cx->names().undefined; // Prevent users from seeing "(void 0)"
- 
-     return ValueToSource(cx, v);
- }
- 
- extern bool
-@@ -2687,17 +2689,18 @@ GetPCCountJSON(JSContext* cx, const Scri
-             if (!ed.init())
-                 return false;
-             // defIndex passed here is not used.
-             if (!ed.decompilePC(pc, /* defIndex = */ 0))
-                 return false;
-             UniqueChars text = ed.getOutput();
-             if (!text)
-                 return false;
--            JSString* str = NewLatin1StringZ(cx, std::move(text));
-+            JS::ConstUTF8CharsZ utf8chars(text.get(), strlen(text.get()));
-+            JSString* str = NewStringCopyUTF8Z<CanGC>(cx, utf8chars);
-             if (!AppendJSONProperty(buf, "text"))
-                 return false;
-             if (!str || !(str = StringToSource(cx, str)))
-                 return false;
-             if (!buf.append(str))
-                 return false;
-         }
- 
-diff --git a/js/src/vm/ForOfIterator.cpp b/js/src/vm/ForOfIterator.cpp
---- a/js/src/vm/ForOfIterator.cpp
-+++ b/js/src/vm/ForOfIterator.cpp
-@@ -62,17 +62,17 @@ ForOfIterator::init(HandleValue iterable
-     // Throw if obj[@@iterator] isn't callable.
-     // js::Invoke is about to check for this kind of error anyway, but it would
-     // throw an inscrutable error message about |method| rather than this nice
-     // one about |obj|.
-     if (!callee.isObject() || !callee.toObject().isCallable()) {
-         UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, iterable, nullptr);
-         if (!bytes)
-             return false;
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_NOT_ITERABLE, bytes.get());
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_NOT_ITERABLE, bytes.get());
-         return false;
-     }
- 
-     RootedValue res(cx);
-     if (!js::Call(cx, callee, iterable, &res))
-         return false;
- 
-     if (!res.isObject())
-diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
---- a/js/src/vm/JSContext.cpp
-+++ b/js/src/vm/JSContext.cpp
-@@ -914,104 +914,91 @@ js::ReportIsNullOrUndefinedForPropertyAc
-         return;
-     }
- 
-     UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, v, nullptr);
-     if (!bytes)
-         return;
- 
-     if (strcmp(bytes.get(), js_undefined_str) == 0 || strcmp(bytes.get(), js_null_str) == 0) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_NO_PROPERTIES,
--                                   bytes.get());
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_NO_PROPERTIES, bytes.get());
-     } else if (v.isUndefined()) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_UNEXPECTED_TYPE,
--                                   bytes.get(), js_undefined_str);
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_UNEXPECTED_TYPE, bytes.get(),
-+                                 js_undefined_str);
-     } else {
-         MOZ_ASSERT(v.isNull());
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_UNEXPECTED_TYPE,
--                                   bytes.get(), js_null_str);
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_UNEXPECTED_TYPE, bytes.get(),
-+                                 js_null_str);
-     }
- }
- 
--static UniqueChars
--EncodeIdAsLatin1(JSContext* cx, HandleId id)
--{
--    RootedValue idVal(cx, IdToValue(id));
--    JSString* idStr = ValueToSource(cx, idVal);
--    if (!idStr)
--        return nullptr;
--
--    return EncodeLatin1(cx, idStr);
--}
--
- void
- js::ReportIsNullOrUndefinedForPropertyAccess(JSContext* cx, HandleValue v, HandleId key,
-                                              bool reportScanStack)
- {
-     MOZ_ASSERT(v.isNullOrUndefined());
- 
--    UniqueChars keyBytes = EncodeIdAsLatin1(cx, key);
-+    UniqueChars keyBytes = IdToPrintableUTF8(cx, key, IdToPrintableBehavior::IdIsPropertyKey);
-     if (!keyBytes)
-         return;
- 
-     if (!reportScanStack) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL,
--                                   keyBytes.get(),
--                                   v.isUndefined() ? js_undefined_str : js_null_str);
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL,
-+                                 keyBytes.get(),
-+                                 v.isUndefined() ? js_undefined_str : js_null_str);
-         return;
-     }
- 
-     UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, v, nullptr);
-     if (!bytes)
-         return;
- 
-     if (strcmp(bytes.get(), js_undefined_str) == 0 || strcmp(bytes.get(), js_null_str) == 0) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL,
--                                   keyBytes.get(), bytes.get());
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL,
-+                                 keyBytes.get(), bytes.get());
-     } else if (v.isUndefined()) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL_EXPR,
--                                   bytes.get(), js_undefined_str, keyBytes.get());
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL_EXPR,
-+                                 bytes.get(), js_undefined_str, keyBytes.get());
-     } else {
-         MOZ_ASSERT(v.isNull());
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL_EXPR,
--                                   bytes.get(), js_null_str, keyBytes.get());
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL_EXPR,
-+                                 bytes.get(), js_null_str, keyBytes.get());
-     }
- }
- 
- void
- js::ReportMissingArg(JSContext* cx, HandleValue v, unsigned arg)
- {
-     char argbuf[11];
-     UniqueChars bytes;
- 
-     SprintfLiteral(argbuf, "%u", arg);
-     if (IsFunctionObject(v)) {
-         RootedAtom name(cx, v.toObject().as<JSFunction>().explicitName());
-         bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, v, name);
-         if (!bytes)
-             return;
-     }
--    JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
--                               JSMSG_MISSING_FUN_ARG,
--                               argbuf, bytes ? bytes.get() : "");
-+    JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_MISSING_FUN_ARG,
-+                             argbuf, bytes ? bytes.get() : "");
- }
- 
- bool
- js::ReportValueErrorFlags(JSContext* cx, unsigned flags, const unsigned errorNumber,
-                           int spindex, HandleValue v, HandleString fallback,
-                           const char* arg1, const char* arg2)
- {
-     MOZ_ASSERT(js_ErrorFormatString[errorNumber].argCount >= 1);
-     MOZ_ASSERT(js_ErrorFormatString[errorNumber].argCount <= 3);
-     UniqueChars bytes = DecompileValueGenerator(cx, spindex, v, fallback);
-     if (!bytes)
-         return false;
- 
--    return JS_ReportErrorFlagsAndNumberLatin1(cx, flags, GetErrorMessage, nullptr, errorNumber,
--                                              bytes.get(), arg1, arg2);
-+    return JS_ReportErrorFlagsAndNumberUTF8(cx, flags, GetErrorMessage, nullptr, errorNumber,
-+                                            bytes.get(), arg1, arg2);
- }
- 
- JSObject*
- js::CreateErrorNotesArray(JSContext* cx, JSErrorReport* report)
- {
-     RootedArrayObject notesArray(cx, NewDenseEmptyArray(cx));
-     if (!notesArray)
-         return nullptr;
-diff --git a/js/src/vm/JSObject.cpp b/js/src/vm/JSObject.cpp
---- a/js/src/vm/JSObject.cpp
-+++ b/js/src/vm/JSObject.cpp
-@@ -79,18 +79,18 @@ using namespace js;
- using namespace js::gc;
- 
- void
- js::ReportNotObject(JSContext* cx, HandleValue v)
- {
-     MOZ_ASSERT(!v.isObject());
- 
-     if (UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, v, nullptr)) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_NOT_NONNULL_OBJECT,
--                                   bytes.get());
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_NOT_NONNULL_OBJECT,
-+                                 bytes.get());
-     }
- }
- 
- void
- js::ReportNotObjectArg(JSContext* cx, const char* nth, const char* fun, HandleValue v)
- {
-     MOZ_ASSERT(!v.isObject());
- 
-@@ -223,18 +223,18 @@ js::GetFirstArgumentAsObject(JSContext* 
-         return false;
-     }
- 
-     HandleValue v = args[0];
-     if (!v.isObject()) {
-         UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, v, nullptr);
-         if (!bytes)
-             return false;
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_UNEXPECTED_TYPE,
--                                   bytes.get(), "not an object");
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_UNEXPECTED_TYPE,
-+                                 bytes.get(), "not an object");
-         return false;
-     }
- 
-     objp.set(&v.toObject());
-     return true;
- }
- 
- static bool
-diff --git a/js/src/vm/Printer.cpp b/js/src/vm/Printer.cpp
---- a/js/src/vm/Printer.cpp
-+++ b/js/src/vm/Printer.cpp
-@@ -3,24 +3,26 @@
-  * This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "vm/Printer.h"
- 
- #include "mozilla/PodOperations.h"
- #include "mozilla/Printf.h"
-+#include "mozilla/RangedPtr.h"
- 
- #include <ctype.h>
- #include <stdarg.h>
- #include <stdio.h>
- 
- #include "jsutil.h"
- 
- #include "ds/LifoAlloc.h"
-+#include "js/CharacterEncoding.h"
- #include "util/Text.h"
- #include "util/Windows.h"
- #include "vm/JSContext.h"
- 
- using mozilla::PodCopy;
- 
- namespace
- {
-@@ -218,34 +220,27 @@ Sprinter::put(const char* s, size_t len)
-     return true;
- }
- 
- bool
- Sprinter::putString(JSString* s)
- {
-     InvariantChecker ic(this);
- 
--    size_t length = s->length();
-+    JSFlatString* flat = s->ensureFlat(context);
-+    if (!flat)
-+        return false;
-+
-+    size_t length = JS::GetDeflatedUTF8StringLength(flat);
- 
-     char* buffer = reserve(length);
-     if (!buffer)
-         return false;
- 
--    JSLinearString* linear = s->ensureLinear(context);
--    if (!linear)
--        return false;
--
--    JS::AutoCheckCannotGC nogc;
--    if (linear->hasLatin1Chars()) {
--        PodCopy(reinterpret_cast<Latin1Char*>(buffer), linear->latin1Chars(nogc), length);
--    } else {
--        const char16_t* src = linear->twoByteChars(nogc);
--        for (size_t i = 0; i < length; i++)
--            buffer[i] = char(src[i]);
--    }
-+    JS::DeflateStringToUTF8Buffer(flat, mozilla::RangedPtr<char>(buffer, length));
- 
-     buffer[length] = '\0';
-     return true;
- }
- 
- ptrdiff_t
- Sprinter::getOffset() const
- {
-diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
---- a/js/src/vm/SelfHosting.cpp
-+++ b/js/src/vm/SelfHosting.cpp
-@@ -294,26 +294,26 @@ ThrowErrorWithType(JSContext* cx, JSExnT
- 
-     UniqueChars errorArgs[3];
-     for (unsigned i = 1; i < 4 && i < args.length(); i++) {
-         HandleValue val = args[i];
-         if (val.isInt32() || val.isString()) {
-             JSString* str = ToString<CanGC>(cx, val);
-             if (!str)
-                 return;
--            errorArgs[i - 1] = EncodeLatin1(cx, str);
-+            errorArgs[i - 1] = StringToNewUTF8CharsZ(cx, *str);
-         } else {
-             errorArgs[i - 1] = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, val, nullptr);
-         }
-         if (!errorArgs[i - 1])
-             return;
-     }
- 
--    JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber,
--                               errorArgs[0].get(), errorArgs[1].get(), errorArgs[2].get());
-+    JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, errorNumber,
-+                             errorArgs[0].get(), errorArgs[1].get(), errorArgs[2].get());
- }
- 
- static bool
- intrinsic_ThrowRangeError(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() >= 1);
- 
-diff --git a/js/src/vm/TypedArrayObject.cpp b/js/src/vm/TypedArrayObject.cpp
---- a/js/src/vm/TypedArrayObject.cpp
-+++ b/js/src/vm/TypedArrayObject.cpp
-@@ -1319,18 +1319,18 @@ TypedArrayObjectTemplate<T>::fromObject(
-     RootedObject arrayLike(cx);
-     if (!callee.isNullOrUndefined()) {
-         // Throw if other[Symbol.iterator] isn't callable.
-         if (!callee.isObject() || !callee.toObject().isCallable()) {
-             RootedValue otherVal(cx, ObjectValue(*other));
-             UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, otherVal, nullptr);
-             if (!bytes)
-                 return nullptr;
--            JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_NOT_ITERABLE,
--                                       bytes.get());
-+            JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_NOT_ITERABLE,
-+                                     bytes.get());
-             return nullptr;
-         }
- 
-         FixedInvokeArgs<2> args2(cx);
-         args2[0].setObject(*other);
-         args2[1].set(callee);
- 
-         // Step 6.a.

+ 0 - 148
frg/work-js/mozilla-release/patches/mozilla-central-push_435010.patch

@@ -1,148 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536135912 25200
-#      Wed Sep 05 01:25:12 2018 -0700
-# Node ID 44d8851437603d5684911c59e53d1254451cb4b3
-# Parent  eb37a9c0cff43121655fa7a8a42bf4ec171cf848
-Bug 1485066 - Part 13: Use JS_ReportErrorNumberASCII when the error arguments are guaranteed to be ASCII characters. r=Waldo
-
-diff --git a/js/src/vm/EnvironmentObject.cpp b/js/src/vm/EnvironmentObject.cpp
---- a/js/src/vm/EnvironmentObject.cpp
-+++ b/js/src/vm/EnvironmentObject.cpp
-@@ -3353,19 +3353,18 @@ js::CheckVarNameConflict(JSContext* cx, 
-     }
-     return true;
- }
- 
- static void
- ReportCannotDeclareGlobalBinding(JSContext* cx, HandlePropertyName name, const char* reason)
- {
-     if (UniqueChars printable = AtomToPrintableString(cx, name)) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
--                                   JSMSG_CANT_DECLARE_GLOBAL_BINDING,
--                                   printable.get(), reason);
-+        JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_CANT_DECLARE_GLOBAL_BINDING,
-+                                  printable.get(), reason);
-     }
- }
- 
- bool
- js::CheckCanDeclareGlobalBinding(JSContext* cx, Handle<GlobalObject*> global,
-                                  HandlePropertyName name, bool isFunction)
- {
-     RootedId id(cx, NameToId(name));
-diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
---- a/js/src/vm/Interpreter.cpp
-+++ b/js/src/vm/Interpreter.cpp
-@@ -1871,18 +1871,18 @@ js::ReportInNotObjectError(JSContext* cx
-         UniqueChars rbytes = uniqueCharsFromString(cx, rref);
-         if (!rbytes)
-             return;
-         JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_IN_STRING,
-                                  lbytes.get(), rbytes.get());
-         return;
-     }
- 
--    JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_IN_NOT_OBJECT,
--                               InformalValueTypeName(rref));
-+    JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_IN_NOT_OBJECT,
-+                              InformalValueTypeName(rref));
- }
- 
- static MOZ_NEVER_INLINE bool
- Interpret(JSContext* cx, RunState& state)
- {
- /*
-  * Define macros for an interpreter loop. Opcode dispatch may be either by a
-  * switch statement or by indirect goto (aka a threaded interpreter), depending
-@@ -5377,18 +5377,18 @@ js::ReportRuntimeLexicalError(JSContext*
- 
-     ReportRuntimeLexicalError(cx, errorNumber, name);
- }
- 
- void
- js::ReportRuntimeRedeclaration(JSContext* cx, HandlePropertyName name, const char* redeclKind)
- {
-     if (UniqueChars printable = AtomToPrintableString(cx, name)) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_REDECLARED_VAR,
--                                   redeclKind, printable.get());
-+        JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_REDECLARED_VAR, redeclKind,
-+                                  printable.get());
-     }
- }
- 
- bool
- js::ThrowCheckIsObject(JSContext* cx, CheckIsObjectKind kind)
- {
-     switch (kind) {
-       case CheckIsObjectKind::IteratorNext:
-@@ -5462,22 +5462,22 @@ js::ThrowUninitializedThis(JSContext* cx
-         UniqueChars str;
-         if (fun->explicitName()) {
-             str = AtomToPrintableString(cx, fun->explicitName());
-             if (!str)
-                 return false;
-             name = str.get();
-         }
- 
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_UNINITIALIZED_THIS, name);
-+        JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_UNINITIALIZED_THIS, name);
-         return false;
-     }
- 
-     MOZ_ASSERT(fun->isArrow());
--    JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_UNINITIALIZED_THIS_ARROW);
-+    JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_UNINITIALIZED_THIS_ARROW);
-     return false;
- }
- 
- JSObject*
- js::HomeObjectSuperBase(JSContext* cx, HandleObject homeObj)
- {
-     RootedObject superBase(cx);
- 
-diff --git a/js/src/vm/JSAtom.h b/js/src/vm/JSAtom.h
---- a/js/src/vm/JSAtom.h
-+++ b/js/src/vm/JSAtom.h
-@@ -13,16 +13,17 @@
- #include "js/TypeDecls.h"
- #include "js/Utility.h"
- #include "vm/CommonPropertyNames.h"
- 
- namespace js {
- 
- /*
-  * Return a printable, lossless char[] representation of a string-type atom.
-+ * The returned string is guaranteed to contain only ASCII characters.
-  */
- extern UniqueChars
- AtomToPrintableString(JSContext* cx, JSAtom* atom);
- 
- class PropertyName;
- 
- }  /* namespace js */
- 
-diff --git a/js/src/vm/UbiNodeCensus.cpp b/js/src/vm/UbiNodeCensus.cpp
---- a/js/src/vm/UbiNodeCensus.cpp
-+++ b/js/src/vm/UbiNodeCensus.cpp
-@@ -1261,18 +1261,18 @@ ParseBreakdown(JSContext* cx, HandleValu
-         return CountTypePtr(cx->new_<ByFilename>(std::move(thenType), std::move(noFilenameType)));
-     }
- 
-     // We didn't recognize the breakdown type; complain.
-     UniqueChars byBytes = QuoteString(cx, by, '"');
-     if (!byBytes)
-         return nullptr;
- 
--    JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_DEBUG_CENSUS_BREAKDOWN,
--                               byBytes.get());
-+    JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_DEBUG_CENSUS_BREAKDOWN,
-+                              byBytes.get());
-     return nullptr;
- }
- 
- // Get the default census breakdown:
- //
- // { by: "coarseType",
- //   objects: { by: "objectClass" },
- //   other:   { by: "internalType" },

+ 0 - 334
frg/work-js/mozilla-release/patches/mozilla-central-push_435107.patch

@@ -1,334 +0,0 @@
-# HG changeset patch
-# User Jon Coppeard <jcoppeard@mozilla.com>
-# Date 1536251187 -3600
-#      Thu Sep 06 17:26:27 2018 +0100
-# Node ID 0c5345e778a5b806a26790848093aad9e934c700
-# Parent  f3881709a4ad6ec5c729447a2c4dc744f3edd1cc
-Bug 1487071 - Use a single GlobalSharedContext when parsing BinAST r=Yoric
-
-diff --git a/js/src/frontend/BinSource.cpp b/js/src/frontend/BinSource.cpp
---- a/js/src/frontend/BinSource.cpp
-+++ b/js/src/frontend/BinSource.cpp
-@@ -102,56 +102,56 @@ BinASTParserBase::~BinASTParserBase()
-     alloc_.freeAllIfHugeAndUnused();
- 
-     cx_->frontendCollectionPool().removeActiveCompilation();
- }
- 
- // ------------- Toplevel constructions
- 
- template<typename Tok> JS::Result<ParseNode*>
--BinASTParser<Tok>::parse(const Vector<uint8_t>& data)
-+BinASTParser<Tok>::parse(GlobalSharedContext* globalsc, const Vector<uint8_t>& data)
- {
--    return parse(data.begin(), data.length());
-+    return parse(globalsc, data.begin(), data.length());
- }
- 
- template<typename Tok> JS::Result<ParseNode*>
--BinASTParser<Tok>::parse(const uint8_t* start, const size_t length)
-+BinASTParser<Tok>::parse(GlobalSharedContext* globalsc, const uint8_t* start, const size_t length)
- {
--    auto result = parseAux(start, length);
-+    auto result = parseAux(globalsc, start, length);
-     poison(); // Make sure that the parser is never used again accidentally.
-     return result;
- }
- 
- 
- template<typename Tok> JS::Result<ParseNode*>
--BinASTParser<Tok>::parseAux(const uint8_t* start, const size_t length)
-+BinASTParser<Tok>::parseAux(GlobalSharedContext* globalsc,
-+                            const uint8_t* start, const size_t length)
- {
-+    MOZ_ASSERT(globalsc);
-+
-     tokenizer_.emplace(cx_, start, length);
- 
--    Directives directives(options().strictOption);
--    GlobalSharedContext globalsc(cx_, ScopeKind::Global,
--                                 directives, options().extraWarningsOption);
--    BinParseContext globalpc(cx_, this, &globalsc, /* newDirectives = */ nullptr);
-+    BinParseContext globalpc(cx_, this, globalsc, /* newDirectives = */ nullptr);
-     if (!globalpc.init())
-         return cx_->alreadyReportedError();
- 
-     ParseContext::VarScope varScope(cx_, &globalpc, usedNames_);
-     if (!varScope.init(&globalpc))
-         return cx_->alreadyReportedError();
- 
-     MOZ_TRY(tokenizer_->readHeader());
- 
-     ParseNode* result(nullptr);
-     MOZ_TRY_VAR(result, parseProgram());
- 
-     mozilla::Maybe<GlobalScope::Data*> bindings = NewGlobalScopeData(cx_, varScope, alloc_,
-                                                                      parseContext_);
-     if (!bindings)
-         return cx_->alreadyReportedError();
--    globalsc.bindings = *bindings;
-+    globalsc->bindings = *bindings;
- 
-     return result; // Magic conversion to Ok.
- }
- 
- 
- template<typename Tok> JS::Result<FunctionBox*>
- BinASTParser<Tok>::buildFunctionBox(GeneratorKind generatorKind,
-     FunctionAsyncKind functionAsyncKind,
-diff --git a/js/src/frontend/BinSource.h b/js/src/frontend/BinSource.h
---- a/js/src/frontend/BinSource.h
-+++ b/js/src/frontend/BinSource.h
-@@ -119,21 +119,23 @@ class BinASTParser : public BinASTParser
-      * Parse a buffer, returning a node (which may be nullptr) in case of success
-      * or Nothing() in case of error.
-      *
-      * The instance of `ParseNode` MAY NOT survive the `BinASTParser`. Indeed,
-      * destruction of the `BinASTParser` will also destroy the `ParseNode`.
-      *
-      * In case of error, the parser reports the JS error.
-      */
--    JS::Result<ParseNode*> parse(const uint8_t* start, const size_t length);
--    JS::Result<ParseNode*> parse(const Vector<uint8_t>& data);
-+    JS::Result<ParseNode*> parse(GlobalSharedContext* globalsc,
-+                                 const uint8_t* start, const size_t length);
-+    JS::Result<ParseNode*> parse(GlobalSharedContext* globalsc, const Vector<uint8_t>& data);
- 
-   private:
--    MOZ_MUST_USE JS::Result<ParseNode*> parseAux(const uint8_t* start, const size_t length);
-+    MOZ_MUST_USE JS::Result<ParseNode*> parseAux(GlobalSharedContext* globalsc,
-+                                                 const uint8_t* start, const size_t length);
- 
-     // --- Raise errors.
-     //
-     // These methods return a (failed) JS::Result for convenience.
- 
-     MOZ_MUST_USE mozilla::GenericErrorResult<JS::Error&> raiseUndeclaredCapture(JSAtom* name);
-     MOZ_MUST_USE mozilla::GenericErrorResult<JS::Error&> raiseInvalidClosedVar(JSAtom* name);
-     MOZ_MUST_USE mozilla::GenericErrorResult<JS::Error&> raiseMissingVariableInAssertedScope(JSAtom* name);
-diff --git a/js/src/frontend/BytecodeCompiler.cpp b/js/src/frontend/BytecodeCompiler.cpp
---- a/js/src/frontend/BytecodeCompiler.cpp
-+++ b/js/src/frontend/BytecodeCompiler.cpp
-@@ -636,26 +636,27 @@ frontend::CompileGlobalBinASTScript(JSCo
-     if (!sourceObj)
-         return nullptr;
- 
-     RootedScript script(cx, JSScript::Create(cx, options, sourceObj, 0, len, 0, len));
- 
-     if (!script)
-         return nullptr;
- 
-+    Directives directives(options.strictOption);
-+    GlobalSharedContext globalsc(cx, ScopeKind::Global, directives, options.extraWarningsOption);
-+
-     frontend::BinASTParser<BinTokenReaderMultipart> parser(cx, alloc, usedNames, options);
- 
--    auto parsed = parser.parse(src, len);
-+    auto parsed = parser.parse(&globalsc, src, len);
- 
-     if (parsed.isErr())
-         return nullptr;
- 
--    Directives dir(false);
--    GlobalSharedContext sc(cx, ScopeKind::Global, dir, false);
--    BytecodeEmitter bce(nullptr, &parser, &sc, script, nullptr, 0);
-+    BytecodeEmitter bce(nullptr, &parser, &globalsc, script, nullptr, 0);
- 
-     if (!bce.init())
-         return nullptr;
- 
-     ParseNode *pn = parsed.unwrap();
-     if (!bce.emitScript(pn))
-         return nullptr;
- 
-diff --git a/js/src/fuzz-tests/testBinASTReader.cpp b/js/src/fuzz-tests/testBinASTReader.cpp
---- a/js/src/fuzz-tests/testBinASTReader.cpp
-+++ b/js/src/fuzz-tests/testBinASTReader.cpp
-@@ -31,16 +31,18 @@ extern JSContext* gCx;
- 
- static int
- testBinASTReaderInit(int *argc, char ***argv) {
-   return 0;
- }
- 
- static int
- testBinASTReaderFuzz(const uint8_t* buf, size_t size) {
-+    using namespace js::frontend;
-+
-     auto gcGuard = mozilla::MakeScopeExit([&] {
-         JS::PrepareForFullGC(gCx);
-         JS::NonIncrementalGC(gCx, GC_NORMAL, JS::gcreason::API);
-     });
- 
-     if (!size) return 0;
- 
-     CompileOptions options(gCx);
-@@ -48,22 +50,26 @@ testBinASTReaderFuzz(const uint8_t* buf,
-        .setFileAndLine("<string>", 1);
- 
-     js::Vector<uint8_t> binSource(gCx);
-     if (!binSource.append(buf, size)) {
-         ReportOutOfMemory(gCx);
-         return 0;
-     }
- 
--    js::frontend::UsedNameTracker binUsedNames(gCx);
-+    UsedNameTracker binUsedNames(gCx);
- 
--    js::frontend::BinASTParser<js::frontend::BinTokenReaderTester> reader(gCx, gCx->tempLifoAlloc(), binUsedNames, options);
-+    Directives directives(false);
-+    GlobalSharedContext globalsc(gCx, ScopeKind::Global, directives, false);
-+
-+    BinASTParser<js::frontend::BinTokenReaderTester> reader(gCx, gCx->tempLifoAlloc(),
-+                                                            binUsedNames, options);
- 
-     // Will be deallocated once `reader` goes out of scope.
--    auto binParsed = reader.parse(binSource);
-+    auto binParsed = reader.parse(&globalsc, binSource);
-     RootedValue binExn(gCx);
-     if (binParsed.isErr()) {
-         js::GetAndClearException(gCx, &binExn);
-         return 0;
-     }
- 
- #if defined(DEBUG) // Dumping an AST is only defined in DEBUG builds
-     Sprinter binPrinter(gCx);
-diff --git a/js/src/jsapi-tests/testBinASTReader.cpp b/js/src/jsapi-tests/testBinASTReader.cpp
---- a/js/src/jsapi-tests/testBinASTReader.cpp
-+++ b/js/src/jsapi-tests/testBinASTReader.cpp
-@@ -197,21 +197,24 @@ runTestFromPath(JSContext* cx, const cha
- 
-         js::Vector<uint8_t> binSource(cx);
-         readFull(binPath.begin(), binSource);
- 
-         // Parse binary file.
-         CompileOptions binOptions(cx);
-         binOptions.setFileAndLine(binPath.begin(), 0);
- 
--        js::frontend::UsedNameTracker binUsedNames(cx);
-+        frontend::UsedNameTracker binUsedNames(cx);
- 
--        js::frontend::BinASTParser<Tok> binParser(cx, allocScope.alloc(), binUsedNames, binOptions);
-+        frontend::Directives directives(false);
-+        frontend::GlobalSharedContext globalsc(cx, ScopeKind::Global, directives, false);
- 
--        auto binParsed = binParser.parse(binSource); // Will be deallocated once `reader` goes out of scope.
-+        frontend::BinASTParser<Tok> binParser(cx, allocScope.alloc(), binUsedNames, binOptions);
-+
-+        auto binParsed = binParser.parse(&globalsc, binSource); // Will be deallocated once `reader` goes out of scope.
-         RootedValue binExn(cx);
-         if (binParsed.isErr()) {
-             // Save exception for more detailed error message, if necessary.
-             if (!js::GetAndClearException(cx, &binExn))
-                 MOZ_CRASH("Couldn't clear binExn");
-         }
- 
-         // The binary parser should accept the file iff the text parser has.
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -4692,21 +4692,49 @@ GetModuleObject(JSContext* cx, unsigned 
-     }
- 
-     args.rval().setObject(*module);
-     return true;
- }
- 
- #if defined(JS_BUILD_BINAST)
- 
-+using js::frontend::BinASTParser;
-+using js::frontend::Directives;
-+using js::frontend::GlobalSharedContext;
-+using js::frontend::ParseNode;
-+using js::frontend::UsedNameTracker;
-+
-+template <typename Tok>
-+static bool
-+ParseBinASTData(JSContext* cx, uint8_t* buf_data, uint32_t buf_length,
-+                GlobalSharedContext* globalsc, UsedNameTracker& usedNames,
-+                const JS::ReadOnlyCompileOptions& options)
-+{
-+    MOZ_ASSERT(globalsc);
-+
-+    // Note: We need to keep `reader` alive as long as we can use `parsed`.
-+    BinASTParser<Tok> reader(cx, cx->tempLifoAlloc(), usedNames, options);
-+
-+    JS::Result<ParseNode*> parsed = reader.parse(globalsc, buf_data, buf_length);
-+
-+    if (parsed.isErr())
-+        return false;
-+
-+#ifdef DEBUG
-+    Fprinter out(stderr);
-+    DumpParseTree(parsed.unwrap(), out);
-+#endif
-+
-+    return true;
-+}
-+
- static bool
- BinParse(JSContext* cx, unsigned argc, Value* vp)
- {
--    using namespace js::frontend;
--
-     CallArgs args = CallArgsFromVp(argc, vp);
- 
-     if (args.length() < 1) {
-         JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_MORE_ARGS_NEEDED,
-                                   "parse", "0", "s");
-         return false;
-     }
- 
-@@ -4777,45 +4805,23 @@ BinParse(JSContext* cx, unsigned argc, V
- 
- 
-     CompileOptions options(cx);
-     options.setIntroductionType("js shell bin parse")
-            .setFileAndLine("<ArrayBuffer>", 1);
- 
-     UsedNameTracker usedNames(cx);
- 
--    JS::Result<ParseNode*> parsed(nullptr);
--    if (useMultipart) {
--        // Note: We need to keep `reader` alive as long as we can use `parsed`.
--        BinASTParser<BinTokenReaderMultipart> reader(cx, cx->tempLifoAlloc(), usedNames, options);
--
--        parsed = reader.parse(buf_data, buf_length);
--
--        if (parsed.isErr())
--            return false;
--
--#ifdef DEBUG
--        Fprinter out(stderr);
--        DumpParseTree(parsed.unwrap(), out);
--#endif
--
--    } else {
--        // Note: We need to keep `reader` alive as long as we can use `parsed`.
--        BinASTParser<BinTokenReaderTester> reader(cx, cx->tempLifoAlloc(), usedNames, options);
--
--        parsed = reader.parse(buf_data, buf_length);
--
--        if (parsed.isErr())
--            return false;
--
--#ifdef DEBUG
--        Fprinter out(stderr);
--        DumpParseTree(parsed.unwrap(), out);
--#endif
--    }
-+    Directives directives(false);
-+    GlobalSharedContext globalsc(cx, ScopeKind::Global, directives, false);
-+
-+    auto parseFunc = useMultipart ? ParseBinASTData<frontend::BinTokenReaderMultipart>
-+                                  : ParseBinASTData<frontend::BinTokenReaderTester>;
-+    if (!parseFunc(cx, buf_data, buf_length, &globalsc, usedNames, options))
-+        return false;
- 
-     args.rval().setUndefined();
-     return true;
- }
- 
- #endif // defined(JS_BUILD_BINAST)
- 
- static bool

+ 0 - 44
frg/work-js/mozilla-release/patches/mozilla-central-push_435279.patch

@@ -1,44 +0,0 @@
-# HG changeset patch
-# User Jason Orendorff <jorendorff@mozilla.com>
-# Date 1535645386 18000
-#      Thu Aug 30 11:09:46 2018 -0500
-# Node ID a5b2607fc1885b4f86cc7421fda89a19737788e4
-# Parent  a79ed7cdda373e993746bf7a16320c94fe940b0b
-Bug 1434391 - Fix OOM handling bug in Debugger (and eliminate an unnecessary wrap() call). r=jimb
-
-diff --git a/js/src/jit-test/tests/debug/bug1434391.js b/js/src/jit-test/tests/debug/bug1434391.js
-new file mode 100644
---- /dev/null
-+++ b/js/src/jit-test/tests/debug/bug1434391.js
-@@ -0,0 +1,6 @@
-+var g = newGlobal();
-+var dbg = new Debugger();
-+var gw = dbg.addDebuggee(g);
-+oomTest(function () {
-+    assertEq(gw.executeInGlobal("(42).toString(0)").throw.errorMessageName, "JSMSG_BAD_RADIX");
-+});
-diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp
---- a/js/src/vm/Debugger.cpp
-+++ b/js/src/vm/Debugger.cpp
-@@ -10306,19 +10306,18 @@ DebuggerObject::getErrorMessageName(JSCo
- 
-     const JSErrorFormatString* efs = GetErrorMessage(nullptr, report->errorNumber);
-     if (!efs) {
-         result.set(nullptr);
-         return true;
-     }
- 
-     RootedString str(cx, JS_NewStringCopyZ(cx, efs->name));
--    if (!cx->compartment()->wrap(cx, &str))
--        return false;
--
-+    if (!str)
-+        return false;
-     result.set(str);
-     return true;
- }
- 
- /* static */ bool
- DebuggerObject::getErrorNotes(JSContext* cx, HandleDebuggerObject object,
-                               MutableHandleValue result)
- {

+ 0 - 44
frg/work-js/mozilla-release/patches/mozilla-central-push_435288.patch

@@ -1,44 +0,0 @@
-# HG changeset patch
-# User Andreea Pavel <apavel@mozilla.com>
-# Date 1536357538 -10800
-#      Sat Sep 08 00:58:58 2018 +0300
-# Node ID b04a830d12cdaa298b97a8135c10b64255d88ffe
-# Parent  238267dc78ec3dd4bbf2f996bea4e877547e69e8
-Backed out changeset a5b2607fc188 (bug 1434391) for failing linux sm build bustages on a CLOSED TREE
-
-diff --git a/js/src/jit-test/tests/debug/bug1434391.js b/js/src/jit-test/tests/debug/bug1434391.js
-deleted file mode 100644
---- a/js/src/jit-test/tests/debug/bug1434391.js
-+++ /dev/null
-@@ -1,6 +0,0 @@
--var g = newGlobal();
--var dbg = new Debugger();
--var gw = dbg.addDebuggee(g);
--oomTest(function () {
--    assertEq(gw.executeInGlobal("(42).toString(0)").throw.errorMessageName, "JSMSG_BAD_RADIX");
--});
-diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp
---- a/js/src/vm/Debugger.cpp
-+++ b/js/src/vm/Debugger.cpp
-@@ -10306,18 +10306,19 @@ DebuggerObject::getErrorMessageName(JSCo
- 
-     const JSErrorFormatString* efs = GetErrorMessage(nullptr, report->errorNumber);
-     if (!efs) {
-         result.set(nullptr);
-         return true;
-     }
- 
-     RootedString str(cx, JS_NewStringCopyZ(cx, efs->name));
--    if (!str)
--        return false;
-+    if (!cx->compartment()->wrap(cx, &str))
-+        return false;
-+
-     result.set(str);
-     return true;
- }
- 
- /* static */ bool
- DebuggerObject::getErrorNotes(JSContext* cx, HandleDebuggerObject object,
-                               MutableHandleValue result)
- {

+ 0 - 166
frg/work-js/mozilla-release/patches/mozilla-central-push_435297.patch

@@ -1,166 +0,0 @@
-# HG changeset patch
-# User Jeff Walden <jwalden@mit.edu>
-# Date 1536295027 25200
-#      Thu Sep 06 21:37:07 2018 -0700
-# Node ID 4bb16d5fe59315ab0e7f31e2eff6f6a162002cba
-# Parent  0e1dd163d6141129e8e58bc835efd2f0cc37be1d
-Bug 1487815 - Compute LifoAlloc chunk-size in a manner that doesn't invoke UB.  r=tcampbell
-
-diff --git a/js/src/ds/LifoAlloc.cpp b/js/src/ds/LifoAlloc.cpp
---- a/js/src/ds/LifoAlloc.cpp
-+++ b/js/src/ds/LifoAlloc.cpp
-@@ -1,16 +1,17 @@
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-  * vim: set ts=8 sts=4 et sw=4 tw=99:
-  * This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "ds/LifoAlloc.h"
- 
-+#include "mozilla/Likely.h"
- #include "mozilla/MathAlgorithms.h"
- 
- #include "ds/MemoryProtectionExceptionHandler.h"
- 
- #ifdef LIFO_CHUNK_PROTECT
- # include "gc/Memory.h"
- #endif
- 
-@@ -137,33 +138,27 @@ LifoAlloc::freeAll()
- 
- LifoAlloc::UniqueBumpChunk
- LifoAlloc::newChunkWithCapacity(size_t n)
- {
-     MOZ_ASSERT(fallibleScope_, "[OOM] Cannot allocate a new chunk in an infallible scope.");
- 
-     // Compute the size which should be requested in order to be able to fit |n|
-     // bytes in a newly allocated chunk, or default to |defaultChunkSize_|.
--    uint8_t* u8begin = nullptr;
--    uint8_t* u8end = u8begin + detail::BumpChunkReservedSpace;
--    u8end = detail::BumpChunk::nextAllocEnd(detail::BumpChunk::nextAllocBase(u8end), n);
--    size_t allocSizeWithCanaries = u8end - u8begin;
- 
--    // Guard for overflow.
--    if (allocSizeWithCanaries < n ||
--        (allocSizeWithCanaries & (size_t(1) << (BitSize<size_t>::value - 1))))
-+    size_t minSize;
-+    if (MOZ_UNLIKELY(!detail::BumpChunk::allocSizeWithRedZone(n, &minSize) ||
-+                     (minSize & (size_t(1) << (BitSize<size_t>::value - 1)))))
-     {
-         return nullptr;
-     }
- 
--    size_t chunkSize;
--    if (allocSizeWithCanaries > defaultChunkSize_)
--        chunkSize = RoundUpPow2(allocSizeWithCanaries);
--    else
--        chunkSize = defaultChunkSize_;
-+    const size_t chunkSize = minSize > defaultChunkSize_
-+                             ?  RoundUpPow2(minSize)
-+                             : defaultChunkSize_;
- 
-     // Create a new BumpChunk, and allocate space for it.
-     UniqueBumpChunk result = detail::BumpChunk::newWithCapacity(chunkSize);
-     if (!result)
-         return nullptr;
-     MOZ_ASSERT(result->computedSizeOfIncludingThis() == chunkSize);
-     return result;
- }
-diff --git a/js/src/ds/LifoAlloc.h b/js/src/ds/LifoAlloc.h
---- a/js/src/ds/LifoAlloc.h
-+++ b/js/src/ds/LifoAlloc.h
-@@ -12,16 +12,17 @@
- #include "mozilla/MemoryChecking.h"
- #include "mozilla/MemoryReporting.h"
- #include "mozilla/Move.h"
- #include "mozilla/PodOperations.h"
- #include "mozilla/TemplateLib.h"
- #include "mozilla/TypeTraits.h"
- 
- #include <new>
-+#include <stddef.h> // size_t
- 
- // This data structure supports stacky LIFO allocation (mark/release and
- // LifoAllocScope). It does not maintain one contiguous segment; instead, it
- // maintains a bunch of linked memory segments. In order to prevent malloc/free
- // thrashing, unused segments are deallocated when garbage collection occurs.
- 
- #include "jsutil.h"
- 
-@@ -191,17 +192,18 @@ class SingleLinkedList
-         return result;
-     }
- };
- 
- static const size_t LIFO_ALLOC_ALIGN = 8;
- 
- MOZ_ALWAYS_INLINE
- uint8_t*
--AlignPtr(uint8_t* orig) {
-+AlignPtr(uint8_t* orig)
-+{
-     static_assert(mozilla::IsPowerOfTwo(LIFO_ALLOC_ALIGN),
-                   "LIFO_ALLOC_ALIGN must be a power of two");
- 
-     uint8_t* result = (uint8_t*) AlignBytes(uintptr_t(orig), LIFO_ALLOC_ALIGN);
-     MOZ_ASSERT(uintptr_t(result) % LIFO_ALLOC_ALIGN == 0);
-     return result;
- }
- 
-@@ -410,16 +412,21 @@ class BumpChunk : public SingleLinkedLis
- 
-     // Release the memory allocated in this chunk since the corresponding mark
-     // got created. This function does not call any of the destructors.
-     void release(Mark m) {
-         MOZ_RELEASE_ASSERT(contains(m));
-         setBump(m.bump_);
-     }
- 
-+    // Given an amount, compute the total size of a chunk for it: reserved
-+    // space before |begin()|, space for |amount| bytes, and red-zone space
-+    // after those bytes that will ultimately end at |capacity_|.
-+    static inline MOZ_MUST_USE bool allocSizeWithRedZone(size_t amount, size_t* size);
-+
-     // Given a bump chunk pointer, find the next base/end pointers. This is
-     // useful for having consistent allocations, and iterating over known size
-     // allocations.
-     static uint8_t* nextAllocBase(uint8_t* e) {
-         return detail::AlignPtr(e);
-     }
-     static uint8_t* nextAllocEnd(uint8_t* b, size_t n) {
-         return b + n + RedZoneSize;
-@@ -468,16 +475,33 @@ class BumpChunk : public SingleLinkedLis
- #endif
- };
- 
- // Space reserved for the BumpChunk internal data, and the alignment of the
- // first allocation content. This can be used to ensure there is enough space
- // for the next allocation (see LifoAlloc::newChunkWithCapacity).
- static constexpr size_t BumpChunkReservedSpace = AlignBytes(sizeof(BumpChunk), LIFO_ALLOC_ALIGN);
- 
-+/* static */ inline MOZ_MUST_USE bool
-+BumpChunk::allocSizeWithRedZone(size_t amount, size_t* size)
-+{
-+    constexpr size_t SpaceBefore = BumpChunkReservedSpace;
-+    static_assert((SpaceBefore % LIFO_ALLOC_ALIGN) == 0,
-+                   "reserved space presumed already aligned");
-+
-+    constexpr size_t SpaceAfter = RedZoneSize;
-+
-+    constexpr size_t SpaceBeforeAndAfter = SpaceBefore + SpaceAfter;
-+    static_assert(SpaceBeforeAndAfter > SpaceBefore,
-+                  "intermediate addition must not overflow");
-+
-+    *size = SpaceBeforeAndAfter + amount;
-+    return MOZ_LIKELY(*size >= SpaceBeforeAndAfter);
-+}
-+
- inline const uint8_t*
- BumpChunk::begin() const
- {
-     return base() + BumpChunkReservedSpace;
- }
- 
- inline uint8_t*
- BumpChunk::begin()

+ 0 - 166
frg/work-js/mozilla-release/patches/mozilla-central-push_435299.patch

@@ -1,166 +0,0 @@
-# HG changeset patch
-# User Andreea Pavel <apavel@mozilla.com>
-# Date 1536361939 -10800
-#      Sat Sep 08 02:12:19 2018 +0300
-# Node ID 94a74f38a657f47ca054f7feaa8f96628bfc9065
-# Parent  a5dd7c81da0ed4e9eaf3181b99298566dfa319f5
-Backed out changeset 4bb16d5fe593 (bug 1487815) for build bustages on a CLOSED TREE
-
-diff --git a/js/src/ds/LifoAlloc.cpp b/js/src/ds/LifoAlloc.cpp
---- a/js/src/ds/LifoAlloc.cpp
-+++ b/js/src/ds/LifoAlloc.cpp
-@@ -1,17 +1,16 @@
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-  * vim: set ts=8 sts=4 et sw=4 tw=99:
-  * This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "ds/LifoAlloc.h"
- 
--#include "mozilla/Likely.h"
- #include "mozilla/MathAlgorithms.h"
- 
- #include "ds/MemoryProtectionExceptionHandler.h"
- 
- #ifdef LIFO_CHUNK_PROTECT
- # include "gc/Memory.h"
- #endif
- 
-@@ -138,27 +137,33 @@ LifoAlloc::freeAll()
- 
- LifoAlloc::UniqueBumpChunk
- LifoAlloc::newChunkWithCapacity(size_t n)
- {
-     MOZ_ASSERT(fallibleScope_, "[OOM] Cannot allocate a new chunk in an infallible scope.");
- 
-     // Compute the size which should be requested in order to be able to fit |n|
-     // bytes in a newly allocated chunk, or default to |defaultChunkSize_|.
-+    uint8_t* u8begin = nullptr;
-+    uint8_t* u8end = u8begin + detail::BumpChunkReservedSpace;
-+    u8end = detail::BumpChunk::nextAllocEnd(detail::BumpChunk::nextAllocBase(u8end), n);
-+    size_t allocSizeWithCanaries = u8end - u8begin;
- 
--    size_t minSize;
--    if (MOZ_UNLIKELY(!detail::BumpChunk::allocSizeWithRedZone(n, &minSize) ||
--                     (minSize & (size_t(1) << (BitSize<size_t>::value - 1)))))
-+    // Guard for overflow.
-+    if (allocSizeWithCanaries < n ||
-+        (allocSizeWithCanaries & (size_t(1) << (BitSize<size_t>::value - 1))))
-     {
-         return nullptr;
-     }
- 
--    const size_t chunkSize = minSize > defaultChunkSize_
--                             ?  RoundUpPow2(minSize)
--                             : defaultChunkSize_;
-+    size_t chunkSize;
-+    if (allocSizeWithCanaries > defaultChunkSize_)
-+        chunkSize = RoundUpPow2(allocSizeWithCanaries);
-+    else
-+        chunkSize = defaultChunkSize_;
- 
-     // Create a new BumpChunk, and allocate space for it.
-     UniqueBumpChunk result = detail::BumpChunk::newWithCapacity(chunkSize);
-     if (!result)
-         return nullptr;
-     MOZ_ASSERT(result->computedSizeOfIncludingThis() == chunkSize);
-     return result;
- }
-diff --git a/js/src/ds/LifoAlloc.h b/js/src/ds/LifoAlloc.h
---- a/js/src/ds/LifoAlloc.h
-+++ b/js/src/ds/LifoAlloc.h
-@@ -12,17 +12,16 @@
- #include "mozilla/MemoryChecking.h"
- #include "mozilla/MemoryReporting.h"
- #include "mozilla/Move.h"
- #include "mozilla/PodOperations.h"
- #include "mozilla/TemplateLib.h"
- #include "mozilla/TypeTraits.h"
- 
- #include <new>
--#include <stddef.h> // size_t
- 
- // This data structure supports stacky LIFO allocation (mark/release and
- // LifoAllocScope). It does not maintain one contiguous segment; instead, it
- // maintains a bunch of linked memory segments. In order to prevent malloc/free
- // thrashing, unused segments are deallocated when garbage collection occurs.
- 
- #include "jsutil.h"
- 
-@@ -192,18 +191,17 @@ class SingleLinkedList
-         return result;
-     }
- };
- 
- static const size_t LIFO_ALLOC_ALIGN = 8;
- 
- MOZ_ALWAYS_INLINE
- uint8_t*
--AlignPtr(uint8_t* orig)
--{
-+AlignPtr(uint8_t* orig) {
-     static_assert(mozilla::IsPowerOfTwo(LIFO_ALLOC_ALIGN),
-                   "LIFO_ALLOC_ALIGN must be a power of two");
- 
-     uint8_t* result = (uint8_t*) AlignBytes(uintptr_t(orig), LIFO_ALLOC_ALIGN);
-     MOZ_ASSERT(uintptr_t(result) % LIFO_ALLOC_ALIGN == 0);
-     return result;
- }
- 
-@@ -412,21 +410,16 @@ class BumpChunk : public SingleLinkedLis
- 
-     // Release the memory allocated in this chunk since the corresponding mark
-     // got created. This function does not call any of the destructors.
-     void release(Mark m) {
-         MOZ_RELEASE_ASSERT(contains(m));
-         setBump(m.bump_);
-     }
- 
--    // Given an amount, compute the total size of a chunk for it: reserved
--    // space before |begin()|, space for |amount| bytes, and red-zone space
--    // after those bytes that will ultimately end at |capacity_|.
--    static inline MOZ_MUST_USE bool allocSizeWithRedZone(size_t amount, size_t* size);
--
-     // Given a bump chunk pointer, find the next base/end pointers. This is
-     // useful for having consistent allocations, and iterating over known size
-     // allocations.
-     static uint8_t* nextAllocBase(uint8_t* e) {
-         return detail::AlignPtr(e);
-     }
-     static uint8_t* nextAllocEnd(uint8_t* b, size_t n) {
-         return b + n + RedZoneSize;
-@@ -475,33 +468,16 @@ class BumpChunk : public SingleLinkedLis
- #endif
- };
- 
- // Space reserved for the BumpChunk internal data, and the alignment of the
- // first allocation content. This can be used to ensure there is enough space
- // for the next allocation (see LifoAlloc::newChunkWithCapacity).
- static constexpr size_t BumpChunkReservedSpace = AlignBytes(sizeof(BumpChunk), LIFO_ALLOC_ALIGN);
- 
--/* static */ inline MOZ_MUST_USE bool
--BumpChunk::allocSizeWithRedZone(size_t amount, size_t* size)
--{
--    constexpr size_t SpaceBefore = BumpChunkReservedSpace;
--    static_assert((SpaceBefore % LIFO_ALLOC_ALIGN) == 0,
--                   "reserved space presumed already aligned");
--
--    constexpr size_t SpaceAfter = RedZoneSize;
--
--    constexpr size_t SpaceBeforeAndAfter = SpaceBefore + SpaceAfter;
--    static_assert(SpaceBeforeAndAfter > SpaceBefore,
--                  "intermediate addition must not overflow");
--
--    *size = SpaceBeforeAndAfter + amount;
--    return MOZ_LIKELY(*size >= SpaceBeforeAndAfter);
--}
--
- inline const uint8_t*
- BumpChunk::begin() const
- {
-     return base() + BumpChunkReservedSpace;
- }
- 
- inline uint8_t*
- BumpChunk::begin()

+ 0 - 92
frg/work-js/mozilla-release/patches/mozilla-central-push_439127.patch

@@ -1,92 +0,0 @@
-# HG changeset patch
-# User Tooru Fujisawa <arai_a@mac.com>
-# Date 1538447323 -32400
-#      Tue Oct 02 11:28:43 2018 +0900
-# Node ID 6568853848ac62384a094e521965e101978b1f62
-# Parent  95702d979c2ae4f45e5bfc1e5a566b50ab3772bc
-Bug 1495601 - Do not raise error if jstests.py is executed without virtualenv on non-automation. r=sfink
-
-diff --git a/js/src/tests/jstests.py b/js/src/tests/jstests.py
---- a/js/src/tests/jstests.py
-+++ b/js/src/tests/jstests.py
-@@ -349,18 +349,20 @@ def load_wpt_tests(requested_paths, excl
-         for test in it:
-             if test[1].get("jsshell"):
-                 yield test
- 
-     test_manifests = testloader.ManifestLoader(test_paths, types=["testharness"],
-                                                meta_filters=[filter_jsshell_tests]).load()
- 
-     run_info_extras = products.load_product(kwargs["config"], "firefox")[-1](**kwargs)
-+    is_automation = os.environ.get('AUTOMATION', False)
-     run_info = wpttest.get_run_info(kwargs["metadata_root"], "firefox",
--                                    debug=debug, extras=run_info_extras)
-+                                    debug=debug, extras=run_info_extras,
-+                                    raise_exception=is_automation)
- 
-     path_filter = testloader.TestFilter(test_manifests,
-                                         include=requested_paths,
-                                         exclude=excluded_paths)
-     loader = testloader.TestLoader(test_manifests,
-                                    ["testharness"],
-                                    run_info,
-                                    manifest_filters=[path_filter])
-diff --git a/testing/web-platform/tests/tools/wptrunner/wptrunner/wpttest.py b/testing/web-platform/tests/tools/wptrunner/wptrunner/wpttest.py
---- a/testing/web-platform/tests/tools/wptrunner/wptrunner/wpttest.py
-+++ b/testing/web-platform/tests/tools/wptrunner/wptrunner/wpttest.py
-@@ -66,19 +66,20 @@ def get_run_info(metadata_root, product,
-     return RunInfo(metadata_root, product, **kwargs)
- 
- 
- class RunInfo(dict):
-     def __init__(self, metadata_root, product, debug,
-                  browser_version=None,
-                  browser_channel=None,
-                  verify=None,
--                 extras=None):
-+                 extras=None,
-+                 raise_exception=True):
-         import mozinfo
--        self._update_mozinfo(metadata_root)
-+        self._update_mozinfo(metadata_root, raise_exception=raise_exception)
-         self.update(mozinfo.info)
- 
-         from update.tree import GitTree
-         try:
-             # GitTree.__init__ throws if we are not in a git tree.
-             rev = GitTree(log_error=False).rev
-         except (OSError, subprocess.CalledProcessError):
-             rev = None
-@@ -97,30 +98,30 @@ class RunInfo(dict):
-             self["browser_channel"] = browser_channel
- 
-         self["verify"] = verify
-         if "wasm" not in self:
-             self["wasm"] = False
-         if extras is not None:
-             self.update(extras)
- 
--    def _update_mozinfo(self, metadata_root):
-+    def _update_mozinfo(self, metadata_root, **kwargs):
-         """Add extra build information from a mozinfo.json file in a parent
-         directory"""
-         import mozinfo
- 
-         path = metadata_root
-         dirs = set()
-         while path != os.path.expanduser('~'):
-             if path in dirs:
-                 break
-             dirs.add(str(path))
-             path = os.path.split(path)[0]
- 
--        mozinfo.find_and_update_from_json(*dirs)
-+        mozinfo.find_and_update_from_json(*dirs, **kwargs)
- 
- 
- class Test(object):
- 
-     result_cls = None
-     subtest_result_cls = None
-     test_type = None
- 

+ 0 - 92
frg/work-js/mozilla-release/patches/mozilla-central-push_439456.patch

@@ -1,92 +0,0 @@
-# HG changeset patch
-# User Cosmin Sabou <csabou@mozilla.com>
-# Date 1538604390 -10800
-#      Thu Oct 04 01:06:30 2018 +0300
-# Node ID 317b91c1fbd51e48238d05bb3e90663245e751f3
-# Parent  520bcd79bd20bcd9eb3903d4d531a90231101eab
-Backed out changeset 6568853848ac (bug 1495601) on request from jgraham for causing issues with mozinfo.json. a=backout
-
-diff --git a/js/src/tests/jstests.py b/js/src/tests/jstests.py
---- a/js/src/tests/jstests.py
-+++ b/js/src/tests/jstests.py
-@@ -349,20 +349,18 @@ def load_wpt_tests(requested_paths, excl
-         for test in it:
-             if test[1].get("jsshell"):
-                 yield test
- 
-     test_manifests = testloader.ManifestLoader(test_paths, types=["testharness"],
-                                                meta_filters=[filter_jsshell_tests]).load()
- 
-     run_info_extras = products.load_product(kwargs["config"], "firefox")[-1](**kwargs)
--    is_automation = os.environ.get('AUTOMATION', False)
-     run_info = wpttest.get_run_info(kwargs["metadata_root"], "firefox",
--                                    debug=debug, extras=run_info_extras,
--                                    raise_exception=is_automation)
-+                                    debug=debug, extras=run_info_extras)
- 
-     path_filter = testloader.TestFilter(test_manifests,
-                                         include=requested_paths,
-                                         exclude=excluded_paths)
-     loader = testloader.TestLoader(test_manifests,
-                                    ["testharness"],
-                                    run_info,
-                                    manifest_filters=[path_filter])
-diff --git a/testing/web-platform/tests/tools/wptrunner/wptrunner/wpttest.py b/testing/web-platform/tests/tools/wptrunner/wptrunner/wpttest.py
---- a/testing/web-platform/tests/tools/wptrunner/wptrunner/wpttest.py
-+++ b/testing/web-platform/tests/tools/wptrunner/wptrunner/wpttest.py
-@@ -66,20 +66,19 @@ def get_run_info(metadata_root, product,
-     return RunInfo(metadata_root, product, **kwargs)
- 
- 
- class RunInfo(dict):
-     def __init__(self, metadata_root, product, debug,
-                  browser_version=None,
-                  browser_channel=None,
-                  verify=None,
--                 extras=None,
--                 raise_exception=True):
-+                 extras=None):
-         import mozinfo
--        self._update_mozinfo(metadata_root, raise_exception=raise_exception)
-+        self._update_mozinfo(metadata_root)
-         self.update(mozinfo.info)
- 
-         from update.tree import GitTree
-         try:
-             # GitTree.__init__ throws if we are not in a git tree.
-             rev = GitTree(log_error=False).rev
-         except (OSError, subprocess.CalledProcessError):
-             rev = None
-@@ -98,30 +97,30 @@ class RunInfo(dict):
-             self["browser_channel"] = browser_channel
- 
-         self["verify"] = verify
-         if "wasm" not in self:
-             self["wasm"] = False
-         if extras is not None:
-             self.update(extras)
- 
--    def _update_mozinfo(self, metadata_root, **kwargs):
-+    def _update_mozinfo(self, metadata_root):
-         """Add extra build information from a mozinfo.json file in a parent
-         directory"""
-         import mozinfo
- 
-         path = metadata_root
-         dirs = set()
-         while path != os.path.expanduser('~'):
-             if path in dirs:
-                 break
-             dirs.add(str(path))
-             path = os.path.split(path)[0]
- 
--        mozinfo.find_and_update_from_json(*dirs, **kwargs)
-+        mozinfo.find_and_update_from_json(*dirs)
- 
- 
- class Test(object):
- 
-     result_cls = None
-     subtest_result_cls = None
-     test_type = None
- 

+ 0 - 7429
frg/work-js/mozilla-release/patches/mozilla-central_434998.patch

@@ -1,7429 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536139542 25200
-#      Wed Sep 05 02:25:42 2018 -0700
-# Node ID 52ae4d84b11e507483430e922d25b2083ad5c73e
-# Parent  9f53dc79984c400b17a8e3ddfa23df67ff7299ca
-Bug 1485066 - Part 1: Remove JSAutoByteString. r=Waldo
-
-diff --git a/dom/base/ChromeUtils.cpp b/dom/base/ChromeUtils.cpp
---- a/dom/base/ChromeUtils.cpp
-+++ b/dom/base/ChromeUtils.cpp
-@@ -1,17 +1,17 @@
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* vim: set ts=8 sts=2 et sw=2 tw=80: */
- /* This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "ChromeUtils.h"
- 
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/SavedFrameAPI.h"
- #include "jsfriendapi.h"
- #include "WrapperFactory.h"
- 
- #include "mozilla/Base64.h"
- #include "mozilla/BasePrincipal.h"
- #include "mozilla/CycleCollectedJSRuntime.h"
- #include "mozilla/PerformanceMetricsCollector.h"
-@@ -462,21 +462,21 @@ namespace module_getter {
-     JS::Rooted<JSObject*> thisObj(aCx);
-     JS::Rooted<jsid> id(aCx);
-     if (!ExtractArgs(aCx, args, &callee, &thisObj, &id)) {
-       return false;
-     }
- 
-     JS::Rooted<JSString*> moduleURI(
-       aCx, js::GetFunctionNativeReserved(callee, SLOT_URI).toString());
--    JSAutoByteString bytes;
--    if (!bytes.encodeUtf8(aCx, moduleURI)) {
-+    JS::UniqueChars bytes = JS_EncodeStringToUTF8(aCx, moduleURI);
-+    if (!bytes) {
-       return false;
-     }
--    nsDependentCString uri(bytes.ptr());
-+    nsDependentCString uri(bytes.get());
- 
-     RefPtr<mozJSComponentLoader> moduleloader = mozJSComponentLoader::Get();
-     MOZ_ASSERT(moduleloader);
- 
-     JS::Rooted<JSObject*> moduleGlobal(aCx);
-     JS::Rooted<JSObject*> moduleExports(aCx);
-     nsresult rv = moduleloader->Import(aCx, uri, &moduleGlobal, &moduleExports);
-     if (NS_FAILED(rv)) {
-diff --git a/dom/base/nsJSUtils.h b/dom/base/nsJSUtils.h
---- a/dom/base/nsJSUtils.h
-+++ b/dom/base/nsJSUtils.h
-@@ -14,17 +14,16 @@
-  * the generated code itself.
-  */
- 
- #include "mozilla/Assertions.h"
- 
- #include "GeckoProfiler.h"
- #include "jsapi.h"
- #include "jsfriendapi.h"
--#include "js/AutoByteString.h"
- #include "js/Conversions.h"
- #include "js/StableStringChars.h"
- #include "nsString.h"
- 
- class nsIScriptContext;
- class nsIScriptElement;
- class nsIScriptGlobalObject;
- class nsXBLPrototypeBinding;
-diff --git a/dom/bindings/BindingUtils.h b/dom/bindings/BindingUtils.h
---- a/dom/bindings/BindingUtils.h
-+++ b/dom/bindings/BindingUtils.h
-@@ -3,17 +3,17 @@
- /* This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
-  * You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #ifndef mozilla_dom_BindingUtils_h__
- #define mozilla_dom_BindingUtils_h__
- 
- #include "jsfriendapi.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/Wrapper.h"
- #include "js/Conversions.h"
- #include "mozilla/ArrayUtils.h"
- #include "mozilla/Alignment.h"
- #include "mozilla/Array.h"
- #include "mozilla/Assertions.h"
- #include "mozilla/DeferredFinalize.h"
- #include "mozilla/dom/BindingDeclarations.h"
-@@ -1308,22 +1308,22 @@ EnumValueNotFound<false>(JSContext* cx, 
-   return true;
- }
- 
- template<>
- inline bool
- EnumValueNotFound<true>(JSContext* cx, JS::HandleString str, const char* type,
-                         const char* sourceDescription)
- {
--  JSAutoByteString deflated;
--  if (!deflated.encodeUtf8(cx, str)) {
-+  JS::UniqueChars deflated = JS_EncodeStringToUTF8(cx, str);
-+  if (!deflated) {
-     return false;
-   }
-   return ThrowErrorMessage(cx, MSG_INVALID_ENUM_VALUE, sourceDescription,
--                           deflated.ptr(), type);
-+                           deflated.get(), type);
- }
- 
- template<typename CharT>
- inline int
- FindEnumStringIndexImpl(const CharT* chars, size_t length, const EnumEntry* values)
- {
-   int i = 0;
-   for (const EnumEntry* value = values; value->value; ++value, ++i) {
-diff --git a/dom/bindings/CallbackInterface.cpp b/dom/bindings/CallbackInterface.cpp
---- a/dom/bindings/CallbackInterface.cpp
-+++ b/dom/bindings/CallbackInterface.cpp
-@@ -1,35 +1,35 @@
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* vim: set ts=8 sts=2 et sw=2 tw=80: */
- /* This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "mozilla/dom/CallbackInterface.h"
- #include "jsapi.h"
-+#include "js/CharacterEncoding.h"
- #include "mozilla/dom/BindingUtils.h"
- #include "nsPrintfCString.h"
- 
- namespace mozilla {
- namespace dom {
- 
- bool
- CallbackInterface::GetCallableProperty(JSContext* cx, JS::Handle<jsid> aPropId,
-                                        JS::MutableHandle<JS::Value> aCallable)
- {
-   if (!JS_GetPropertyById(cx, CallbackKnownNotGray(), aPropId, aCallable)) {
-     return false;
-   }
-   if (!aCallable.isObject() ||
-       !JS::IsCallable(&aCallable.toObject())) {
--    char* propName =
-+    JS::UniqueChars propName =
-       JS_EncodeString(cx, JS_FORGET_STRING_FLATNESS(JSID_TO_FLAT_STRING(aPropId)));
--    nsPrintfCString description("Property '%s'", propName);
--    JS_free(cx, propName);
-+    nsPrintfCString description("Property '%s'", propName.get());
-     ThrowErrorMessage(cx, MSG_NOT_CALLABLE, description.get());
-     return false;
-   }
- 
-   return true;
- }
- 
- } // namespace dom
-diff --git a/ipc/testshell/XPCShellEnvironment.cpp b/ipc/testshell/XPCShellEnvironment.cpp
---- a/ipc/testshell/XPCShellEnvironment.cpp
-+++ b/ipc/testshell/XPCShellEnvironment.cpp
-@@ -11,17 +11,17 @@
- #endif
- #ifdef HAVE_UNISTD_H
- #include <unistd.h>     /* for isatty() */
- #endif
- 
- #include "base/basictypes.h"
- 
- #include "jsapi.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/CompilationAndEvaluation.h"
- #include "js/SourceBufferHolder.h"
- 
- #include "xpcpublic.h"
- 
- #include "XPCShellEnvironment.h"
- 
- #include "mozilla/XPCOM.h"
-@@ -78,20 +78,20 @@ static bool
- Print(JSContext *cx, unsigned argc, JS::Value *vp)
- {
-     JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
- 
-     for (unsigned i = 0; i < args.length(); i++) {
-         JSString *str = JS::ToString(cx, args[i]);
-         if (!str)
-             return false;
--        JSAutoByteString bytes(cx, str);
-+        JS::UniqueChars bytes = JS_EncodeString(cx, str);
-         if (!bytes)
-             return false;
--        fprintf(stdout, "%s%s", i ? " " : "", bytes.ptr());
-+        fprintf(stdout, "%s%s", i ? " " : "", bytes.get());
-         fflush(stdout);
-     }
-     fputc('\n', stdout);
-     args.rval().setUndefined();
-     return true;
- }
- 
- static bool
-@@ -114,21 +114,21 @@ Dump(JSContext *cx, unsigned argc, JS::V
-     JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
- 
-     if (!args.length())
-         return true;
- 
-     JSString *str = JS::ToString(cx, args[0]);
-     if (!str)
-         return false;
--    JSAutoByteString bytes(cx, str);
-+    JS::UniqueChars bytes = JS_EncodeString(cx, str);
-     if (!bytes)
-       return false;
- 
--    fputs(bytes.ptr(), stdout);
-+    fputs(bytes.get(), stdout);
-     fflush(stdout);
-     return true;
- }
- 
- static bool
- Load(JSContext *cx,
-      unsigned argc,
-      JS::Value *vp)
-@@ -142,30 +142,30 @@ Load(JSContext *cx,
-         JS_ReportErrorASCII(cx, "Trying to load() into a non-global object");
-         return false;
-     }
- 
-     for (unsigned i = 0; i < args.length(); i++) {
-         JS::Rooted<JSString*> str(cx, JS::ToString(cx, args[i]));
-         if (!str)
-             return false;
--        JSAutoByteString filename(cx, str);
-+        JS::UniqueChars filename = JS_EncodeString(cx, str);
-         if (!filename)
-             return false;
--        FILE *file = fopen(filename.ptr(), "r");
-+        FILE *file = fopen(filename.get(), "r");
-         if (!file) {
--            filename.clear();
--            if (!filename.encodeUtf8(cx, str))
-+            filename = JS_EncodeStringToUTF8(cx, str);
-+            if (!filename)
-                 return false;
--            JS_ReportErrorUTF8(cx, "cannot open file '%s' for reading", filename.ptr());
-+            JS_ReportErrorUTF8(cx, "cannot open file '%s' for reading", filename.get());
-             return false;
-         }
-         JS::CompileOptions options(cx);
-         options.setUTF8(true)
--               .setFileAndLine(filename.ptr(), 1);
-+               .setFileAndLine(filename.get(), 1);
-         JS::Rooted<JSScript*> script(cx);
-         bool ok = JS::Compile(cx, options, file, &script);
-         fclose(file);
-         if (!ok)
-             return false;
- 
-         if (!JS_ExecuteScript(cx, script)) {
-             return false;
-@@ -341,23 +341,23 @@ XPCShellEnvironment::ProcessFile(JSConte
-         if (JS_CompileScript(cx, buffer, strlen(buffer), options, &script)) {
-             JS::WarningReporter older;
- 
-             ok = JS_ExecuteScript(cx, script, &result);
-             if (ok && !result.isUndefined()) {
-                 /* Suppress warnings from JS::ToString(). */
-                 older = JS::SetWarningReporter(cx, nullptr);
-                 str = JS::ToString(cx, result);
--                JSAutoByteString bytes;
-+                JS::UniqueChars bytes;
-                 if (str)
--                    bytes.encodeLatin1(cx, str);
-+                    bytes = JS_EncodeString(cx, str);
-                 JS::SetWarningReporter(cx, older);
- 
-                 if (!!bytes)
--                    fprintf(stdout, "%s\n", bytes.ptr());
-+                    fprintf(stdout, "%s\n", bytes.get());
-                 else
-                     ok = false;
-             }
-         }
-     } while (!hitEOF && !env->IsQuitting());
- 
-     fprintf(stdout, "\n");
- }
-diff --git a/js/public/AutoByteString.h b/js/public/AutoByteString.h
-deleted file mode 100644
---- a/js/public/AutoByteString.h
-+++ /dev/null
-@@ -1,140 +0,0 @@
--/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
--/* This Source Code Form is subject to the terms of the Mozilla Public
-- * License, v. 2.0. If a copy of the MPL was not distributed with this
-- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
--
--/*
-- * DEPRECATED functions and classes for heap-allocating copies of a JSString's
-- * data.
-- */
--
--#ifndef js_AutoByteString_h
--#define js_AutoByteString_h
--
--#include "mozilla/Assertions.h" // MOZ_ASSERT
--#include "mozilla/Attributes.h" // MOZ_RAII, MOZ_GUARD*
--
--#include <string.h> // strlen
--
--#include "jstypes.h" // JS_PUBLIC_API
--
--#include "js/MemoryFunctions.h" // JS_free
--#include "js/RootingAPI.h" // JS::Handle
--#include "js/TypeDecls.h" // JSContext, JSString
--#include "js/Utility.h" // js_free, JS::UniqueChars
--
--/**
-- * DEPRECATED
-- *
-- * Allocate memory sufficient to contain the characters of |str| truncated to
-- * Latin-1 and a trailing null terminator, fill the memory with the characters
-- * interpreted in that manner plus the null terminator, and return a pointer to
-- * the memory.  The memory must be freed using JS_free to avoid leaking.
-- *
-- * This function *loses information* when it copies the characters of |str| if
-- * |str| contains code units greater than 0xFF.  Additionally, users that
-- * depend on null-termination will misinterpret the copied characters if |str|
-- * contains any nulls.  Avoid using this function if possible, because it will
-- * eventually be removed.
-- */
--extern JS_PUBLIC_API(char*)
--JS_EncodeString(JSContext* cx, JSString* str);
--
--/**
-- * DEPRECATED
-- *
-- * Same behavior as JS_EncodeString(), but encode into a UTF-8 string.
-- *
-- * This function *loses information* when it copies the characters of |str| if
-- * |str| contains invalid UTF-16: U+FFFD REPLACEMENT CHARACTER will be copied
-- * instead.
-- *
-- * The returned string is also subject to misinterpretation if |str| contains
-- * any nulls (which are faithfully transcribed into the returned string, but
-- * which will implicitly truncate the string if it's passed to functions that
-- * expect null-terminated strings).
-- *
-- * Avoid using this function if possible, because we'll remove it once we can
-- * devise a better API for the task.
-- */
--extern JS_PUBLIC_API(char*)
--JS_EncodeStringToUTF8(JSContext* cx, JS::Handle<JSString*> str);
--
--/**
-- * DEPRECATED
-- *
-- * A lightweight RAII helper class around the various JS_Encode* functions
-- * above, subject to the same pitfalls noted above.  Avoid using this class if
-- * possible, because as with the functions above, it too needs to be replaced
-- * with a better, safer API.
-- */
--class MOZ_RAII JSAutoByteString final
--{
--  private:
--    char* mBytes;
--    MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
--
--  private:
--    JSAutoByteString(const JSAutoByteString& another) = delete;
--    void operator=(const JSAutoByteString& another) = delete;
--
--  public:
--    JSAutoByteString(JSContext* cx, JSString* str
--                     MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
--      : mBytes(JS_EncodeString(cx, str))
--    {
--        MOZ_ASSERT(cx);
--        MOZ_GUARD_OBJECT_NOTIFIER_INIT;
--    }
--
--    explicit JSAutoByteString(MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM)
--      : mBytes(nullptr)
--    {
--        MOZ_GUARD_OBJECT_NOTIFIER_INIT;
--    }
--
--    ~JSAutoByteString() {
--        JS_free(nullptr, mBytes);
--    }
--
--    /* Take ownership of the given byte array. */
--    void initBytes(JS::UniqueChars&& bytes) {
--        MOZ_ASSERT(!mBytes);
--        mBytes = bytes.release();
--    }
--
--    char* encodeLatin1(JSContext* cx, JSString* str) {
--        MOZ_ASSERT(!mBytes);
--        MOZ_ASSERT(cx);
--        mBytes = JS_EncodeString(cx, str);
--        return mBytes;
--    }
--
--    char* encodeUtf8(JSContext* cx, JS::Handle<JSString*> str) {
--        MOZ_ASSERT(!mBytes);
--        MOZ_ASSERT(cx);
--        mBytes = JS_EncodeStringToUTF8(cx, str);
--        return mBytes;
--    }
--
--    void clear() {
--        js_free(mBytes);
--        mBytes = nullptr;
--    }
--
--    char* ptr() const {
--        return mBytes;
--    }
--
--    bool operator!() const {
--        return !mBytes;
--    }
--
--    size_t length() const {
--        if (!mBytes)
--            return 0;
--        return strlen(mBytes);
--    }
--};
--
--#endif /* js_AutoByteString_h */
-diff --git a/js/public/CharacterEncoding.h b/js/public/CharacterEncoding.h
---- a/js/public/CharacterEncoding.h
-+++ b/js/public/CharacterEncoding.h
-@@ -326,9 +326,46 @@ LossyUTF8CharsToNewLatin1CharsZ(JSContex
- extern JS_PUBLIC_API(bool)
- StringIsASCII(const char* s);
- 
- } // namespace JS
- 
- inline void JS_free(JS::Latin1CharsZ& ptr) { js_free((void*)ptr.get()); }
- inline void JS_free(JS::UTF8CharsZ& ptr) { js_free((void*)ptr.get()); }
- 
-+/**
-+ * DEPRECATED
-+ *
-+ * Allocate memory sufficient to contain the characters of |str| truncated to
-+ * Latin-1 and a trailing null terminator, fill the memory with the characters
-+ * interpreted in that manner plus the null terminator, and return a pointer to
-+ * the memory.
-+ *
-+ * This function *loses information* when it copies the characters of |str| if
-+ * |str| contains code units greater than 0xFF.  Additionally, users that
-+ * depend on null-termination will misinterpret the copied characters if |str|
-+ * contains any nulls.  Avoid using this function if possible, because it will
-+ * eventually be removed.
-+ */
-+extern JS_PUBLIC_API(JS::UniqueChars)
-+JS_EncodeString(JSContext* cx, JSString* str);
-+
-+/**
-+ * DEPRECATED
-+ *
-+ * Same behavior as JS_EncodeString(), but encode into a UTF-8 string.
-+ *
-+ * This function *loses information* when it copies the characters of |str| if
-+ * |str| contains invalid UTF-16: U+FFFD REPLACEMENT CHARACTER will be copied
-+ * instead.
-+ *
-+ * The returned string is also subject to misinterpretation if |str| contains
-+ * any nulls (which are faithfully transcribed into the returned string, but
-+ * which will implicitly truncate the string if it's passed to functions that
-+ * expect null-terminated strings).
-+ *
-+ * Avoid using this function if possible, because we'll remove it once we can
-+ * devise a better API for the task.
-+ */
-+extern JS_PUBLIC_API(JS::UniqueChars)
-+JS_EncodeStringToUTF8(JSContext* cx, JS::Handle<JSString*> str);
-+
- #endif /* js_CharacterEncoding_h */
-diff --git a/js/rust/build.rs b/js/rust/build.rs
---- a/js/rust/build.rs
-+++ b/js/rust/build.rs
-@@ -314,17 +314,16 @@ const WHITELIST_FUNCTIONS: &'static [&'s
-     "JS_DefineProperties",
-     "JS_DefineProperty",
-     "JS_DefinePropertyById",
-     "JS_DefineUCProperty",
-     "JS::detail::InitWithFailureDiagnostic",
-     "JS_DestroyContext",
-     "JS::DisableIncrementalGC",
-     "js::Dump.*",
--    "JS_EncodeStringToUTF8",
-     "JS::EnterRealm",
-     "JS_EnumerateStandardClasses",
-     "JS_ErrorFromException",
-     "JS_FireOnNewGlobalObject",
-     "JS_free",
-     "JS_GC",
-     "JS_GetArrayBufferData",
-     "JS_GetArrayBufferViewType",
-diff --git a/js/rust/src/glue.rs b/js/rust/src/glue.rs
---- a/js/rust/src/glue.rs
-+++ b/js/rust/src/glue.rs
-@@ -335,15 +335,19 @@ extern "C" {
-     pub fn DeleteJSAutoStructuredCloneBuffer(buf: *mut JSAutoStructuredCloneBuffer);
-     pub fn GetLengthOfJSStructuredCloneData(data: *mut JSStructuredCloneData) -> usize;
-     pub fn CopyJSStructuredCloneData(src: *mut JSStructuredCloneData, dest: *mut u8);
-     pub fn WriteBytesToJSStructuredCloneData(src: *const u8,
-                                              len: usize,
-                                              dest: *mut JSStructuredCloneData)
-                                              -> bool;
- 
-+    pub fn JSEncodeStringToUTF8(cx: *mut JSContext,
-+                                string: JS::HandleString)
-+                                -> *mut ::libc::c_char;
-+
-     pub fn IsDebugBuild() -> bool;
- }
- 
- #[test]
- fn jsglue_cpp_configured_correctly() {
-     assert_eq!(cfg!(feature = "debugmozjs"), unsafe { IsDebugBuild() });
- }
-diff --git a/js/rust/src/jsglue.cpp b/js/rust/src/jsglue.cpp
---- a/js/rust/src/jsglue.cpp
-+++ b/js/rust/src/jsglue.cpp
-@@ -10,16 +10,17 @@
- #ifdef JS_DEBUG
- // A hack for MFBT. Guard objects need this to work.
- #define DEBUG 1
- #endif
- 
- #include "jsapi.h"
- #include "jsfriendapi.h"
- #include "js/Proxy.h"
-+#include "js/CharacterEncoding.h"
- #include "js/Class.h"
- #include "js/MemoryMetrics.h"
- #include "js/Principals.h"
- #include "js/StructuredClone.h"
- #include "js/Wrapper.h"
- #include "assert.h"
- 
- struct ProxyTraps {
-@@ -915,9 +916,15 @@ bool
- WriteBytesToJSStructuredCloneData(const uint8_t* src, size_t len, JSStructuredCloneData* dest)
- {
-     assert(src != nullptr);
-     assert(dest != nullptr);
- 
-     return dest->AppendBytes(reinterpret_cast<const char*>(src), len);
- }
- 
-+char*
-+JSEncodeStringToUTF8(JSContext* cx, JS::HandleString string)
-+{
-+    return JS_EncodeStringToUTF8(cx, string).release();
-+}
-+
- } // extern "C"
-diff --git a/js/rust/tests/callback.rs b/js/rust/tests/callback.rs
---- a/js/rust/tests/callback.rs
-+++ b/js/rust/tests/callback.rs
-@@ -2,21 +2,21 @@
-  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
-  * You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #[macro_use]
- extern crate js;
- extern crate libc;
- 
- use js::ar::AutoRealm;
-+use js::glue::JSEncodeStringToUTF8;
- use js::jsapi::root::JS::CallArgs;
- use js::jsapi::root::JS::RealmOptions;
- use js::jsapi::root::JSContext;
- use js::jsapi::root::JS_DefineFunction;
--use js::jsapi::root::JS_EncodeStringToUTF8;
- use js::jsapi::root::JS_NewGlobalObject;
- use js::jsapi::root::JS_ReportErrorASCII;
- use js::jsapi::root::JS::OnNewGlobalHookOption;
- use js::jsapi::root::JS::Value;
- use js::jsval::UndefinedValue;
- use js::rust::{Runtime, SIMPLE_GLOBAL_CLASS};
- 
- use std::ffi::CStr;
-@@ -50,15 +50,15 @@ unsafe extern "C" fn puts(context: *mut 
-     if args._base.argc_ != 1 {
-         JS_ReportErrorASCII(context, b"puts() requires exactly 1 argument\0".as_ptr() as *const libc::c_char);
-         return false;
-     }
- 
-     let arg = args.get(0);
-     let js = js::rust::ToString(context, arg);
-     rooted!(in(context) let message_root = js);
--    let message = JS_EncodeStringToUTF8(context, message_root.handle());
-+    let message = JSEncodeStringToUTF8(context, message_root.handle());
-     let message = CStr::from_ptr(message);
-     println!("{}", str::from_utf8(message.to_bytes()).unwrap());
- 
-     args.rval().set(UndefinedValue());
-     return true;
- }
-diff --git a/js/src/builtin/Profilers.cpp b/js/src/builtin/Profilers.cpp
---- a/js/src/builtin/Profilers.cpp
-+++ b/js/src/builtin/Profilers.cpp
-@@ -23,16 +23,17 @@
- #endif
- #endif
- 
- #ifdef XP_WIN
- # include <process.h>
- # define getpid _getpid
- #endif
- 
-+#include "js/CharacterEncoding.h"
- #include "js/Utility.h"
- #include "util/Text.h"
- #include "vm/Probes.h"
- 
- #include "vm/JSContext-inl.h"
- 
- using namespace js;
- 
-@@ -198,17 +199,17 @@ RequiredStringArg(JSContext* cx, const C
-         return nullptr;
-     }
- 
-     if (!args[argi].isString()) {
-         JS_ReportErrorASCII(cx, "%s: invalid arguments (string expected)", caller);
-         return nullptr;
-     }
- 
--    return UniqueChars(JS_EncodeString(cx, args[argi].toString()));
-+    return JS_EncodeString(cx, args[argi].toString());
- }
- 
- static bool
- StartProfiling(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     if (args.length() == 0) {
-         args.rval().setBoolean(JS_StartProfiling(nullptr, getpid()));
-diff --git a/js/src/builtin/ReflectParse.cpp b/js/src/builtin/ReflectParse.cpp
---- a/js/src/builtin/ReflectParse.cpp
-+++ b/js/src/builtin/ReflectParse.cpp
-@@ -3389,17 +3389,17 @@ reflect_parse(JSContext* cx, uint32_t ar
-             if (!GetPropertyDefault(cx, config, sourceId, nullVal, &prop))
-                 return false;
- 
-             if (!prop.isNullOrUndefined()) {
-                 RootedString str(cx, ToString<CanGC>(cx, prop));
-                 if (!str)
-                     return false;
- 
--                filename.reset(JS_EncodeString(cx, str));
-+                filename = JS_EncodeString(cx, str);
-                 if (!filename)
-                     return false;
-             }
- 
-             /* config.line */
-             RootedId lineId(cx, NameToId(cx->names().line));
-             RootedValue oneValue(cx, Int32Value(1));
-             if (!GetPropertyDefault(cx, config, lineId, oneValue, &prop) ||
-diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
---- a/js/src/builtin/TestingFunctions.cpp
-+++ b/js/src/builtin/TestingFunctions.cpp
-@@ -36,17 +36,17 @@
- #include "irregexp/RegExpAST.h"
- #include "irregexp/RegExpEngine.h"
- #include "irregexp/RegExpParser.h"
- #endif
- #include "gc/Heap.h"
- #include "jit/BaselineJIT.h"
- #include "jit/InlinableNatives.h"
- #include "jit/JitRealm.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/CompilationAndEvaluation.h"
- #include "js/CompileOptions.h"
- #include "js/Debug.h"
- #include "js/HashTable.h"
- #include "js/LocaleSensitive.h"
- #include "js/SourceBufferHolder.h"
- #include "js/StableStringChars.h"
- #include "js/StructuredClone.h"
-@@ -1409,23 +1409,23 @@ CallFunctionWithAsyncStack(JSContext* cx
-     if (!args[2].isString() || args[2].toString()->empty()) {
-         JS_ReportErrorASCII(cx, "The third argument should be a non-empty string.");
-         return false;
-     }
- 
-     RootedObject function(cx, &args[0].toObject());
-     RootedObject stack(cx, &args[1].toObject());
-     RootedString asyncCause(cx, args[2].toString());
--    JSAutoByteString utf8Cause;
--    if (!utf8Cause.encodeUtf8(cx, asyncCause)) {
-+    UniqueChars utf8Cause = JS_EncodeStringToUTF8(cx, asyncCause);
-+    if (!utf8Cause) {
-         MOZ_ASSERT(cx->isExceptionPending());
-         return false;
-     }
- 
--    JS::AutoSetAsyncStackForNewCalls sas(cx, stack, utf8Cause.ptr(),
-+    JS::AutoSetAsyncStackForNewCalls sas(cx, stack, utf8Cause.get(),
-                                          JS::AutoSetAsyncStackForNewCalls::AsyncCallKind::EXPLICIT);
-     return Call(cx, UndefinedHandleValue, function,
-                 JS::HandleValueArray::empty(), args.rval());
- }
- 
- static bool
- EnableTrackAllocations(JSContext* cx, unsigned argc, Value* vp)
- {
-@@ -2189,26 +2189,26 @@ DumpHeap(JSContext* cx, unsigned argc, V
-         }
-     }
- 
-     if (args.length() > i) {
-         Value v = args[i];
-         if (v.isString()) {
-             if (!fuzzingSafe) {
-                 RootedString str(cx, v.toString());
--                JSAutoByteString fileNameBytes;
--                if (!fileNameBytes.encodeLatin1(cx, str))
-+                UniqueChars fileNameBytes = JS_EncodeString(cx, str);
-+                if (!fileNameBytes)
-                     return false;
--                const char* fileName = fileNameBytes.ptr();
-+                const char* fileName = fileNameBytes.get();
-                 dumpFile = fopen(fileName, "w");
-                 if (!dumpFile) {
--                    fileNameBytes.clear();
--                    if (!fileNameBytes.encodeUtf8(cx, str))
-+                    fileNameBytes = JS_EncodeStringToUTF8(cx, str);
-+                    if (!fileNameBytes)
-                         return false;
--                    JS_ReportErrorUTF8(cx, "can't open %s", fileNameBytes.ptr());
-+                    JS_ReportErrorUTF8(cx, "can't open %s", fileNameBytes.get());
-                     return false;
-                 }
-             }
-             ++i;
-         }
-     }
- 
-     if (i != args.length()) {
-@@ -2741,48 +2741,50 @@ class CloneBufferObject : public NativeO
-         js_delete(data());
-         setReservedSlot(DATA_SLOT, PrivateValue(nullptr));
-     }
- 
-     static bool
-     setCloneBuffer_impl(JSContext* cx, const CallArgs& args) {
-         Rooted<CloneBufferObject*> obj(cx, &args.thisv().toObject().as<CloneBufferObject>());
- 
--        uint8_t* data = nullptr;
--        UniquePtr<uint8_t[], JS::FreePolicy> dataOwner;
-+        const char* data = nullptr;
-+        UniqueChars dataOwner;
-         uint32_t nbytes;
- 
-         if (args.get(0).isObject() && args[0].toObject().is<ArrayBufferObject>()) {
-             ArrayBufferObject* buffer = &args[0].toObject().as<ArrayBufferObject>();
-             bool isSharedMemory;
--            js::GetArrayBufferLengthAndData(buffer, &nbytes, &isSharedMemory, &data);
-+            uint8_t* dataBytes = nullptr;
-+            js::GetArrayBufferLengthAndData(buffer, &nbytes, &isSharedMemory, &dataBytes);
-             MOZ_ASSERT(!isSharedMemory);
-+            data = reinterpret_cast<char*>(dataBytes);
-         } else {
-             JSString* str = JS::ToString(cx, args.get(0));
-             if (!str)
-                 return false;
--            data = reinterpret_cast<uint8_t*>(JS_EncodeString(cx, str));
--            if (!data)
-+            dataOwner = JS_EncodeString(cx, str);
-+            if (!dataOwner)
-                 return false;
--            dataOwner.reset(data);
-+            data = dataOwner.get();
-             nbytes = JS_GetStringLength(str);
-         }
- 
-         if (nbytes == 0 || (nbytes % sizeof(uint64_t) != 0)) {
-             JS_ReportErrorASCII(cx, "Invalid length for clonebuffer data");
-             return false;
-         }
- 
-         auto buf = js::MakeUnique<JSStructuredCloneData>(JS::StructuredCloneScope::DifferentProcess);
-         if (!buf || !buf->Init(nbytes)) {
-             ReportOutOfMemory(cx);
-             return false;
-         }
- 
--        MOZ_ALWAYS_TRUE(buf->AppendBytes((const char*)data, nbytes));
-+        MOZ_ALWAYS_TRUE(buf->AppendBytes(data, nbytes));
-         obj->discard();
-         obj->setData(buf.release(), true);
- 
-         args.rval().setUndefined();
-         return true;
-     }
- 
-     static bool
-@@ -2909,27 +2911,27 @@ const JSPropertySpec CloneBufferObject::
-     JS_PS_END
- };
- 
- static mozilla::Maybe<JS::StructuredCloneScope>
- ParseCloneScope(JSContext* cx, HandleString str)
- {
-     mozilla::Maybe<JS::StructuredCloneScope> scope;
- 
--    JSAutoByteString scopeStr(cx, str);
-+    UniqueChars scopeStr = JS_EncodeString(cx, str);
-     if (!scopeStr)
-         return scope;
- 
--    if (strcmp(scopeStr.ptr(), "SameProcessSameThread") == 0)
-+    if (strcmp(scopeStr.get(), "SameProcessSameThread") == 0)
-         scope.emplace(JS::StructuredCloneScope::SameProcessSameThread);
--    else if (strcmp(scopeStr.ptr(), "SameProcessDifferentThread") == 0)
-+    else if (strcmp(scopeStr.get(), "SameProcessDifferentThread") == 0)
-         scope.emplace(JS::StructuredCloneScope::SameProcessDifferentThread);
--    else if (strcmp(scopeStr.ptr(), "DifferentProcess") == 0)
-+    else if (strcmp(scopeStr.get(), "DifferentProcess") == 0)
-         scope.emplace(JS::StructuredCloneScope::DifferentProcess);
--    else if (strcmp(scopeStr.ptr(), "DifferentProcessForIndexedDB") == 0)
-+    else if (strcmp(scopeStr.get(), "DifferentProcessForIndexedDB") == 0)
-         scope.emplace(JS::StructuredCloneScope::DifferentProcessForIndexedDB);
- 
-     return scope;
- }
- 
- static bool
- Serialize(JSContext* cx, unsigned argc, Value* vp)
- {
-@@ -2946,23 +2948,23 @@ Serialize(JSContext* cx, unsigned argc, 
-         RootedValue v(cx);
-         if (!JS_GetProperty(cx, opts, "SharedArrayBuffer", &v))
-             return false;
- 
-         if (!v.isUndefined()) {
-             JSString* str = JS::ToString(cx, v);
-             if (!str)
-                 return false;
--            JSAutoByteString poli(cx, str);
-+            UniqueChars poli = JS_EncodeString(cx, str);
-             if (!poli)
-                 return false;
- 
--            if (strcmp(poli.ptr(), "allow") == 0) {
-+            if (strcmp(poli.get(), "allow") == 0) {
-                 // default
--            } else if (strcmp(poli.ptr(), "deny") == 0) {
-+            } else if (strcmp(poli.get(), "deny") == 0) {
-                 policy.denySharedArrayBuffer();
-             } else {
-                 JS_ReportErrorASCII(cx, "Invalid policy value for 'SharedArrayBuffer'");
-                 return false;
-             }
-         }
- 
-         if (!JS_GetProperty(cx, opts, "scope", &v))
-@@ -4116,39 +4118,39 @@ SetGCCallback(JSContext* cx, unsigned ar
- 
-     RootedValue v(cx);
-     if (!JS_GetProperty(cx, opts, "action", &v))
-         return false;
- 
-     JSString* str = JS::ToString(cx, v);
-     if (!str)
-         return false;
--    JSAutoByteString action(cx, str);
-+    UniqueChars action = JS_EncodeString(cx, str);
-     if (!action)
-         return false;
- 
-     int32_t phases = 0;
--    if ((strcmp(action.ptr(), "minorGC") == 0) || (strcmp(action.ptr(), "majorGC") == 0)) {
-+    if ((strcmp(action.get(), "minorGC") == 0) || (strcmp(action.get(), "majorGC") == 0)) {
-         if (!JS_GetProperty(cx, opts, "phases", &v))
-             return false;
-         if (v.isUndefined()) {
-             phases = (1 << JSGC_END);
-         } else {
-             JSString* str = JS::ToString(cx, v);
-             if (!str)
-                 return false;
--            JSAutoByteString phasesStr(cx, str);
-+            UniqueChars phasesStr = JS_EncodeString(cx, str);
-             if (!phasesStr)
-                 return false;
- 
--            if (strcmp(phasesStr.ptr(), "begin") == 0)
-+            if (strcmp(phasesStr.get(), "begin") == 0)
-                 phases = (1 << JSGC_BEGIN);
--            else if (strcmp(phasesStr.ptr(), "end") == 0)
-+            else if (strcmp(phasesStr.get(), "end") == 0)
-                 phases = (1 << JSGC_END);
--            else if (strcmp(phasesStr.ptr(), "both") == 0)
-+            else if (strcmp(phasesStr.get(), "both") == 0)
-                 phases = (1 << JSGC_BEGIN) | (1 << JSGC_END);
-             else {
-                 JS_ReportErrorASCII(cx, "Invalid callback phase");
-                 return false;
-             }
-         }
-     }
- 
-@@ -4159,27 +4161,27 @@ SetGCCallback(JSContext* cx, unsigned ar
-     }
- 
-     if (gcCallback::prevMinorGC) {
-         JS_SetGCCallback(cx, nullptr, nullptr);
-         js_delete<gcCallback::MinorGC>(gcCallback::prevMinorGC);
-         gcCallback::prevMinorGC = nullptr;
-     }
- 
--    if (strcmp(action.ptr(), "minorGC") == 0) {
-+    if (strcmp(action.get(), "minorGC") == 0) {
-         auto info = js_new<gcCallback::MinorGC>();
-         if (!info) {
-             ReportOutOfMemory(cx);
-             return false;
-         }
- 
-         info->phases = phases;
-         info->active = true;
-         JS_SetGCCallback(cx, gcCallback::minorGC, info);
--    } else if (strcmp(action.ptr(), "majorGC") == 0) {
-+    } else if (strcmp(action.get(), "majorGC") == 0) {
-         if (!JS_GetProperty(cx, opts, "depth", &v))
-             return false;
-         int32_t depth = 1;
-         if (!v.isUndefined()) {
-             if (!ToInt32(cx, v, &depth))
-                 return false;
-         }
-         if (depth < 0) {
-@@ -4729,21 +4731,21 @@ SetTimeZone(JSContext* cx, unsigned argc
- #if defined(_WIN32)
-         return _putenv_s("TZ", "") == 0;
- #else
-         return unsetenv("TZ") == 0;
- #endif /* _WIN32 */
-     };
- 
-     if (args[0].isString() && !args[0].toString()->empty()) {
--        JSAutoByteString timeZone;
--        if (!timeZone.encodeLatin1(cx, args[0].toString()))
-+        UniqueChars timeZone = JS_EncodeString(cx, args[0].toString());
-+        if (!timeZone)
-             return false;
- 
--        if (!setTimeZone(timeZone.ptr())) {
-+        if (!setTimeZone(timeZone.get())) {
-             JS_ReportErrorASCII(cx, "Failed to set 'TZ' environment variable");
-             return false;
-         }
-     } else {
-         if (!unsetTimeZone()) {
-             JS_ReportErrorASCII(cx, "Failed to unset 'TZ' environment variable");
-             return false;
-         }
-@@ -4819,21 +4821,21 @@ SetDefaultLocale(JSContext* cx, unsigned
-                             : containsOnlyValidBCP47Characters(str->twoByteChars(nogc), length);
-         }
- 
-         if (!hasValidChars) {
-             ReportUsageErrorASCII(cx, callee, "First argument should be BCP47 language tag");
-             return false;
-         }
- 
--        JSAutoByteString locale;
--        if (!locale.encodeLatin1(cx, str))
-+        UniqueChars locale = JS_EncodeString(cx, str);
-+        if (!locale)
-             return false;
- 
--        if (!JS_SetDefaultLocale(cx->runtime(), locale.ptr())) {
-+        if (!JS_SetDefaultLocale(cx->runtime(), locale.get())) {
-             ReportOutOfMemory(cx);
-             return false;
-         }
-     } else {
-         JS_ResetDefaultLocale(cx->runtime());
-     }
- 
-     args.rval().setUndefined();
-diff --git a/js/src/builtin/TypedObject.cpp b/js/src/builtin/TypedObject.cpp
---- a/js/src/builtin/TypedObject.cpp
-+++ b/js/src/builtin/TypedObject.cpp
-@@ -7,16 +7,17 @@
- #include "builtin/TypedObject-inl.h"
- 
- #include "mozilla/Casting.h"
- #include "mozilla/CheckedInt.h"
- 
- #include "jsutil.h"
- 
- #include "gc/Marking.h"
-+#include "js/CharacterEncoding.h"
- #include "js/Vector.h"
- #include "util/StringBuffer.h"
- #include "vm/GlobalObject.h"
- #include "vm/JSFunction.h"
- #include "vm/Realm.h"
- #include "vm/SelfHosting.h"
- #include "vm/StringType.h"
- #include "vm/TypedArrayObject.h"
-@@ -1593,17 +1594,17 @@ TypedObject::createZeroed(JSContext* cx,
- 
- static bool
- ReportTypedObjTypeError(JSContext* cx,
-                         const unsigned errorNumber,
-                         HandleTypedObject obj)
- {
-     // Serialize type string of obj
-     RootedAtom typeReprAtom(cx, &obj->typeDescr().stringRepr());
--    UniqueChars typeReprStr(JS_EncodeStringToUTF8(cx, typeReprAtom));
-+    UniqueChars typeReprStr = JS_EncodeStringToUTF8(cx, typeReprAtom);
-     if (!typeReprStr)
-         return false;
- 
-     JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, errorNumber, typeReprStr.get());
-     return false;
- }
- 
- /* static */ void
-@@ -1700,17 +1701,17 @@ ReportPropertyError(JSContext* cx,
-                     const unsigned errorNumber,
-                     HandleId id)
- {
-     RootedValue idVal(cx, IdToValue(id));
-     RootedString str(cx, ValueToSource(cx, idVal));
-     if (!str)
-         return false;
- 
--    UniqueChars propName(JS_EncodeStringToUTF8(cx, str));
-+    UniqueChars propName = JS_EncodeStringToUTF8(cx, str);
-     if (!propName)
-         return false;
- 
-     JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, errorNumber, propName.get());
-     return false;
- }
- 
- bool
-diff --git a/js/src/builtin/intl/Collator.cpp b/js/src/builtin/intl/Collator.cpp
---- a/js/src/builtin/intl/Collator.cpp
-+++ b/js/src/builtin/intl/Collator.cpp
-@@ -12,17 +12,17 @@
- 
- #include "jsapi.h"
- 
- #include "builtin/intl/CommonFunctions.h"
- #include "builtin/intl/ICUStubs.h"
- #include "builtin/intl/ScopedICUObject.h"
- #include "builtin/intl/SharedIntlData.h"
- #include "gc/FreeOp.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/StableStringChars.h"
- #include "js/TypeDecls.h"
- #include "vm/GlobalObject.h"
- #include "vm/JSContext.h"
- #include "vm/Runtime.h"
- #include "vm/StringType.h"
- 
- #include "vm/JSObject-inl.h"
-@@ -195,21 +195,21 @@ js::intl_Collator_availableLocales(JSCon
- 
- bool
- js::intl_availableCollations(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 1);
-     MOZ_ASSERT(args[0].isString());
- 
--    JSAutoByteString locale(cx, args[0].toString());
-+    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-     if (!locale)
-         return false;
-     UErrorCode status = U_ZERO_ERROR;
--    UEnumeration* values = ucol_getKeywordValuesForLocale("co", locale.ptr(), false, &status);
-+    UEnumeration* values = ucol_getKeywordValuesForLocale("co", locale.get(), false, &status);
-     if (U_FAILURE(status)) {
-         ReportInternalError(cx);
-         return false;
-     }
-     ScopedICUObject<UEnumeration, uenum_close> toClose(values);
- 
-     uint32_t count = uenum_count(values, &status);
-     if (U_FAILURE(status)) {
-@@ -272,17 +272,17 @@ NewUCollator(JSContext* cx, Handle<Colla
-     RootedValue value(cx);
- 
-     RootedObject internals(cx, intl::GetInternalsObject(cx, collator));
-     if (!internals)
-         return nullptr;
- 
-     if (!GetProperty(cx, internals, internals, cx->names().locale, &value))
-         return nullptr;
--    JSAutoByteString locale(cx, value.toString());
-+    UniqueChars locale = JS_EncodeString(cx, value.toString());
-     if (!locale)
-         return nullptr;
- 
-     // UCollator options with default values.
-     UColAttributeValue uStrength = UCOL_DEFAULT;
-     UColAttributeValue uCaseLevel = UCOL_OFF;
-     UColAttributeValue uAlternate = UCOL_DEFAULT;
-     UColAttributeValue uNumeric = UCOL_OFF;
-@@ -295,17 +295,17 @@ NewUCollator(JSContext* cx, Handle<Colla
- 
-     {
-         JSLinearString* usage = value.toString()->ensureLinear(cx);
-         if (!usage)
-             return nullptr;
-         if (StringEqualsAscii(usage, "search")) {
-             // ICU expects search as a Unicode locale extension on locale.
-             // Unicode locale extensions must occur before private use extensions.
--            const char* oldLocale = locale.ptr();
-+            const char* oldLocale = locale.get();
-             const char* p;
-             size_t index;
-             size_t localeLen = strlen(oldLocale);
-             if ((p = strstr(oldLocale, "-x-")))
-                 index = p - oldLocale;
-             else
-                 index = localeLen;
- 
-@@ -318,18 +318,17 @@ NewUCollator(JSContext* cx, Handle<Colla
-             }
-             size_t insertLen = strlen(insert);
-             char* newLocale = cx->pod_malloc<char>(localeLen + insertLen + 1);
-             if (!newLocale)
-                 return nullptr;
-             memcpy(newLocale, oldLocale, index);
-             memcpy(newLocale + index, insert, insertLen);
-             memcpy(newLocale + index + insertLen, oldLocale + index, localeLen - index + 1); // '\0'
--            locale.clear();
--            locale.initBytes(JS::UniqueChars(newLocale));
-+            locale = JS::UniqueChars(newLocale);
-         } else {
-             MOZ_ASSERT(StringEqualsAscii(usage, "sort"));
-         }
-     }
- 
-     // We don't need to look at the collation property - it can only be set
-     // via the Unicode locale extension and is therefore already set on
-     // locale.
-@@ -381,17 +380,17 @@ NewUCollator(JSContext* cx, Handle<Colla
-             uCaseFirst = UCOL_LOWER_FIRST;
-         } else {
-             MOZ_ASSERT(StringEqualsAscii(caseFirst, "false"));
-             uCaseFirst = UCOL_OFF;
-         }
-     }
- 
-     UErrorCode status = U_ZERO_ERROR;
--    UCollator* coll = ucol_open(IcuLocale(locale.ptr()), &status);
-+    UCollator* coll = ucol_open(IcuLocale(locale.get()), &status);
-     if (U_FAILURE(status)) {
-         ReportInternalError(cx);
-         return nullptr;
-     }
- 
-     ucol_setAttribute(coll, UCOL_STRENGTH, uStrength, &status);
-     ucol_setAttribute(coll, UCOL_CASE_LEVEL, uCaseLevel, &status);
-     ucol_setAttribute(coll, UCOL_ALTERNATE_HANDLING, uAlternate, &status);
-diff --git a/js/src/builtin/intl/DateTimeFormat.cpp b/js/src/builtin/intl/DateTimeFormat.cpp
---- a/js/src/builtin/intl/DateTimeFormat.cpp
-+++ b/js/src/builtin/intl/DateTimeFormat.cpp
-@@ -14,17 +14,17 @@
- #include "jsfriendapi.h"
- 
- #include "builtin/intl/CommonFunctions.h"
- #include "builtin/intl/ICUStubs.h"
- #include "builtin/intl/ScopedICUObject.h"
- #include "builtin/intl/SharedIntlData.h"
- #include "builtin/intl/TimeZoneDataGenerated.h"
- #include "gc/FreeOp.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/StableStringChars.h"
- #include "vm/DateTime.h"
- #include "vm/GlobalObject.h"
- #include "vm/JSContext.h"
- #include "vm/Runtime.h"
- 
- #include "vm/JSObject-inl.h"
- #include "vm/NativeObject-inl.h"
-@@ -231,20 +231,20 @@ js::intl_DateTimeFormat_availableLocales
-     RootedValue result(cx);
-     if (!GetAvailableLocales(cx, udat_countAvailable, udat_getAvailable, &result))
-         return false;
-     args.rval().set(result);
-     return true;
- }
- 
- static bool
--DefaultCalendar(JSContext* cx, const JSAutoByteString& locale, MutableHandleValue rval)
-+DefaultCalendar(JSContext* cx, const UniqueChars& locale, MutableHandleValue rval)
- {
-     UErrorCode status = U_ZERO_ERROR;
--    UCalendar* cal = ucal_open(nullptr, 0, locale.ptr(), UCAL_DEFAULT, &status);
-+    UCalendar* cal = ucal_open(nullptr, 0, locale.get(), UCAL_DEFAULT, &status);
- 
-     // This correctly handles nullptr |cal| when opening failed.
-     ScopedICUObject<UCalendar, ucal_close> closeCalendar(cal);
- 
-     const char* calendar = ucal_getType(cal, &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return false;
-@@ -278,17 +278,17 @@ const CalendarAlias calendarAliases[] = 
- 
- bool
- js::intl_availableCalendars(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 1);
-     MOZ_ASSERT(args[0].isString());
- 
--    JSAutoByteString locale(cx, args[0].toString());
-+    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     RootedObject calendars(cx, NewDenseEmptyArray(cx));
-     if (!calendars)
-         return false;
-     uint32_t index = 0;
- 
-@@ -297,17 +297,17 @@ js::intl_availableCalendars(JSContext* c
-     if (!DefaultCalendar(cx, locale, &element))
-         return false;
- 
-     if (!DefineDataElement(cx, calendars, index++, element))
-         return false;
- 
-     // Now get the calendars that "would make a difference", i.e., not the default.
-     UErrorCode status = U_ZERO_ERROR;
--    UEnumeration* values = ucal_getKeywordValuesForLocale("ca", locale.ptr(), false, &status);
-+    UEnumeration* values = ucal_getKeywordValuesForLocale("ca", locale.get(), false, &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return false;
-     }
-     ScopedICUObject<UEnumeration, uenum_close> toClose(values);
- 
-     uint32_t count = uenum_count(values, &status);
-     if (U_FAILURE(status)) {
-@@ -355,17 +355,17 @@ js::intl_availableCalendars(JSContext* c
- 
- bool
- js::intl_defaultCalendar(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 1);
-     MOZ_ASSERT(args[0].isString());
- 
--    JSAutoByteString locale(cx, args[0].toString());
-+    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     return DefaultCalendar(cx, locale, args.rval());
- }
- 
- bool
- js::intl_IsValidTimeZoneName(JSContext* cx, unsigned argc, Value* vp)
-@@ -522,28 +522,28 @@ js::intl_isDefaultTimeZone(JSContext* cx
- bool
- js::intl_patternForSkeleton(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 2);
-     MOZ_ASSERT(args[0].isString());
-     MOZ_ASSERT(args[1].isString());
- 
--    JSAutoByteString locale(cx, args[0].toString());
-+    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     AutoStableStringChars skeleton(cx);
-     if (!skeleton.initTwoByte(cx, args[1].toString()))
-         return false;
- 
-     mozilla::Range<const char16_t> skelChars = skeleton.twoByteRange();
- 
-     UErrorCode status = U_ZERO_ERROR;
--    UDateTimePatternGenerator* gen = udatpg_open(IcuLocale(locale.ptr()), &status);
-+    UDateTimePatternGenerator* gen = udatpg_open(IcuLocale(locale.get()), &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return false;
-     }
-     ScopedICUObject<UDateTimePatternGenerator, udatpg_close> toClose(gen);
- 
-     JSString* str =
-         CallICU(cx, [gen, &skelChars](UChar* chars, uint32_t size, UErrorCode* status) {
-@@ -559,17 +559,17 @@ js::intl_patternForSkeleton(JSContext* c
- 
- bool
- js::intl_patternForStyle(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 4);
-     MOZ_ASSERT(args[0].isString());
- 
--    JSAutoByteString locale(cx, args[0].toString());
-+    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     UDateFormatStyle dateStyle = UDAT_NONE;
-     UDateFormatStyle timeStyle = UDAT_NONE;
- 
-     if (args[1].isString()) {
-         JSLinearString* dateStyleStr = args[1].toString()->ensureLinear(cx);
-@@ -607,17 +607,17 @@ js::intl_patternForStyle(JSContext* cx, 
- 
-     AutoStableStringChars timeZone(cx);
-     if (!timeZone.initTwoByte(cx, args[3].toString()))
-         return false;
- 
-     mozilla::Range<const char16_t> timeZoneChars = timeZone.twoByteRange();
- 
-     UErrorCode status = U_ZERO_ERROR;
--    UDateFormat* df = udat_open(timeStyle, dateStyle, IcuLocale(locale.ptr()),
-+    UDateFormat* df = udat_open(timeStyle, dateStyle, IcuLocale(locale.get()),
-                                 timeZoneChars.begin().get(), timeZoneChars.length(),
-                                 nullptr, -1, &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return false;
-     }
-     ScopedICUObject<UDateFormat, udat_close> toClose(df);
- 
-@@ -640,17 +640,17 @@ NewUDateFormat(JSContext* cx, Handle<Dat
-     RootedValue value(cx);
- 
-     RootedObject internals(cx, intl::GetInternalsObject(cx, dateTimeFormat));
-     if (!internals)
-        return nullptr;
- 
-     if (!GetProperty(cx, internals, internals, cx->names().locale, &value))
-         return nullptr;
--    JSAutoByteString locale(cx, value.toString());
-+    UniqueChars locale = JS_EncodeString(cx, value.toString());
-     if (!locale)
-         return nullptr;
- 
-     // We don't need to look at calendar and numberingSystem - they can only be
-     // set via the Unicode locale extension and are therefore already set on
-     // locale.
- 
-     if (!GetProperty(cx, internals, internals, cx->names().timeZone, &value))
-@@ -668,17 +668,17 @@ NewUDateFormat(JSContext* cx, Handle<Dat
-     AutoStableStringChars pattern(cx);
-     if (!pattern.initTwoByte(cx, value.toString()))
-         return nullptr;
- 
-     mozilla::Range<const char16_t> patternChars = pattern.twoByteRange();
- 
-     UErrorCode status = U_ZERO_ERROR;
-     UDateFormat* df =
--        udat_open(UDAT_PATTERN, UDAT_PATTERN, IcuLocale(locale.ptr()),
-+        udat_open(UDAT_PATTERN, UDAT_PATTERN, IcuLocale(locale.get()),
-                   timeZoneChars.begin().get(), timeZoneChars.length(),
-                   patternChars.begin().get(), patternChars.length(), &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return nullptr;
-     }
- 
-     // ECMAScript requires the Gregorian calendar to be used from the beginning
-diff --git a/js/src/builtin/intl/IntlObject.cpp b/js/src/builtin/intl/IntlObject.cpp
---- a/js/src/builtin/intl/IntlObject.cpp
-+++ b/js/src/builtin/intl/IntlObject.cpp
-@@ -16,17 +16,17 @@
- 
- #include "builtin/intl/Collator.h"
- #include "builtin/intl/CommonFunctions.h"
- #include "builtin/intl/DateTimeFormat.h"
- #include "builtin/intl/ICUStubs.h"
- #include "builtin/intl/NumberFormat.h"
- #include "builtin/intl/PluralRules.h"
- #include "builtin/intl/ScopedICUObject.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/Class.h"
- #include "js/StableStringChars.h"
- #include "vm/GlobalObject.h"
- #include "vm/JSContext.h"
- #include "vm/JSObject.h"
- #include "vm/StringType.h"
- 
- #include "vm/JSObject-inl.h"
-@@ -45,24 +45,24 @@ using js::intl::IcuLocale;
- /******************** Intl ********************/
- 
- bool
- js::intl_GetCalendarInfo(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 1);
- 
--    JSAutoByteString locale(cx, args[0].toString());
-+    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     UErrorCode status = U_ZERO_ERROR;
-     const UChar* uTimeZone = nullptr;
-     int32_t uTimeZoneLength = 0;
--    UCalendar* cal = ucal_open(uTimeZone, uTimeZoneLength, locale.ptr(), UCAL_DEFAULT, &status);
-+    UCalendar* cal = ucal_open(uTimeZone, uTimeZoneLength, locale.get(), UCAL_DEFAULT, &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return false;
-     }
-     ScopedICUObject<UCalendar, ucal_close> toClose(cal);
- 
-     RootedObject info(cx, NewBuiltinClassInstance<PlainObject>(cx));
-     if (!info)
-@@ -366,18 +366,18 @@ ComputeSingleDisplayName(JSContext* cx, 
- bool
- js::intl_ComputeDisplayNames(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 3);
- 
-     // 1. Assert: locale is a string.
-     RootedString str(cx, args[0].toString());
--    JSAutoByteString locale;
--    if (!locale.encodeUtf8(cx, str))
-+    UniqueChars locale = JS_EncodeStringToUTF8(cx, str);
-+    if (!locale)
-         return false;
- 
-     // 2. Assert: style is a string.
-     DisplayNameStyle dnStyle;
-     {
-         JSLinearString* style = args[1].toString()->ensureLinear(cx);
-         if (!style)
-             return false;
-@@ -400,27 +400,27 @@ js::intl_ComputeDisplayNames(JSContext* 
-     // 4. Let result be ArrayCreate(0).
-     RootedArrayObject result(cx, NewDenseUnallocatedArray(cx, keys->length()));
-     if (!result)
-         return false;
- 
-     UErrorCode status = U_ZERO_ERROR;
- 
-     UDateFormat* fmt =
--        udat_open(UDAT_DEFAULT, UDAT_DEFAULT, IcuLocale(locale.ptr()),
-+        udat_open(UDAT_DEFAULT, UDAT_DEFAULT, IcuLocale(locale.get()),
-         nullptr, 0, nullptr, 0, &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return false;
-     }
-     ScopedICUObject<UDateFormat, udat_close> datToClose(fmt);
- 
-     // UDateTimePatternGenerator will be needed for translations of date and
-     // time fields like "month", "week", "day" etc.
--    UDateTimePatternGenerator* dtpg = udatpg_open(IcuLocale(locale.ptr()), &status);
-+    UDateTimePatternGenerator* dtpg = udatpg_open(IcuLocale(locale.get()), &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return false;
-     }
-     ScopedICUObject<UDateTimePatternGenerator, udatpg_close> datPgToClose(dtpg);
- 
-     // 5. For each element of keys,
-     RootedString keyValStr(cx);
-@@ -456,28 +456,28 @@ js::intl_ComputeDisplayNames(JSContext* 
- }
- 
- bool
- js::intl_GetLocaleInfo(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 1);
- 
--    JSAutoByteString locale(cx, args[0].toString());
-+    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     RootedObject info(cx, NewBuiltinClassInstance<PlainObject>(cx));
-     if (!info)
-         return false;
- 
-     if (!DefineDataProperty(cx, info, cx->names().locale, args[0]))
-         return false;
- 
--    bool rtl = uloc_isRightToLeft(IcuLocale(locale.ptr()));
-+    bool rtl = uloc_isRightToLeft(IcuLocale(locale.get()));
- 
-     RootedValue dir(cx, StringValue(rtl ? cx->names().rtl : cx->names().ltr));
- 
-     if (!DefineDataProperty(cx, info, cx->names().direction, dir))
-         return false;
- 
-     args.rval().setObject(*info);
-     return true;
-diff --git a/js/src/builtin/intl/NumberFormat.cpp b/js/src/builtin/intl/NumberFormat.cpp
---- a/js/src/builtin/intl/NumberFormat.cpp
-+++ b/js/src/builtin/intl/NumberFormat.cpp
-@@ -15,16 +15,17 @@
- #include <stddef.h>
- #include <stdint.h>
- 
- #include "builtin/intl/CommonFunctions.h"
- #include "builtin/intl/ICUStubs.h"
- #include "builtin/intl/ScopedICUObject.h"
- #include "ds/Sort.h"
- #include "gc/FreeOp.h"
-+#include "js/CharacterEncoding.h"
- #include "js/RootingAPI.h"
- #include "js/StableStringChars.h"
- #include "js/TypeDecls.h"
- #include "vm/JSContext.h"
- #include "vm/SelfHosting.h"
- #include "vm/Stack.h"
- 
- #include "vm/JSObject-inl.h"
-@@ -208,22 +209,22 @@ js::intl_NumberFormat_availableLocales(J
- 
- bool
- js::intl_numberingSystem(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 1);
-     MOZ_ASSERT(args[0].isString());
- 
--    JSAutoByteString locale(cx, args[0].toString());
-+    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     UErrorCode status = U_ZERO_ERROR;
--    UNumberingSystem* numbers = unumsys_open(IcuLocale(locale.ptr()), &status);
-+    UNumberingSystem* numbers = unumsys_open(IcuLocale(locale.get()), &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return false;
-     }
- 
-     ScopedICUObject<UNumberingSystem, unumsys_close> toClose(numbers);
- 
-     const char* name = unumsys_getName(numbers);
-@@ -250,17 +251,17 @@ NewUNumberFormat(JSContext* cx, Handle<N
-     RootedValue value(cx);
- 
-     RootedObject internals(cx, intl::GetInternalsObject(cx, numberFormat));
-     if (!internals)
-        return nullptr;
- 
-     if (!GetProperty(cx, internals, internals, cx->names().locale, &value))
-         return nullptr;
--    JSAutoByteString locale(cx, value.toString());
-+    UniqueChars locale = JS_EncodeString(cx, value.toString());
-     if (!locale)
-         return nullptr;
- 
-     // UNumberFormat options with default values
-     UNumberFormatStyle uStyle = UNUM_DECIMAL;
-     const UChar* uCurrency = nullptr;
-     uint32_t uMinimumIntegerDigits = 1;
-     uint32_t uMinimumFractionDigits = 0;
-@@ -342,17 +343,17 @@ NewUNumberFormat(JSContext* cx, Handle<N
-         uMaximumFractionDigits = AssertedCast<uint32_t>(value.toInt32());
-     }
- 
-     if (!GetProperty(cx, internals, internals, cx->names().useGrouping, &value))
-         return nullptr;
-     uUseGrouping = value.toBoolean();
- 
-     UErrorCode status = U_ZERO_ERROR;
--    UNumberFormat* nf = unum_open(uStyle, nullptr, 0, IcuLocale(locale.ptr()), nullptr, &status);
-+    UNumberFormat* nf = unum_open(uStyle, nullptr, 0, IcuLocale(locale.get()), nullptr, &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return nullptr;
-     }
-     ScopedICUObject<UNumberFormat, unum_close> toClose(nf);
- 
-     if (uCurrency) {
-         unum_setTextAttribute(nf, UNUM_CURRENCY_CODE, uCurrency, 3, &status);
-diff --git a/js/src/builtin/intl/PluralRules.cpp b/js/src/builtin/intl/PluralRules.cpp
---- a/js/src/builtin/intl/PluralRules.cpp
-+++ b/js/src/builtin/intl/PluralRules.cpp
-@@ -10,17 +10,17 @@
- 
- #include "mozilla/Assertions.h"
- #include "mozilla/Casting.h"
- 
- #include "builtin/intl/CommonFunctions.h"
- #include "builtin/intl/ICUStubs.h"
- #include "builtin/intl/ScopedICUObject.h"
- #include "gc/FreeOp.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "vm/GlobalObject.h"
- #include "vm/JSContext.h"
- #include "vm/StringType.h"
- 
- #include "vm/JSObject-inl.h"
- #include "vm/NativeObject-inl.h"
- 
- using namespace js;
-@@ -191,17 +191,17 @@ NewUNumberFormatForPluralRules(JSContext
-     RootedObject internals(cx, intl::GetInternalsObject(cx, pluralRules));
-     if (!internals)
-        return nullptr;
- 
-     RootedValue value(cx);
- 
-     if (!GetProperty(cx, internals, internals, cx->names().locale, &value))
-         return nullptr;
--    JSAutoByteString locale(cx, value.toString());
-+    UniqueChars locale = JS_EncodeString(cx, value.toString());
-     if (!locale)
-         return nullptr;
- 
-     uint32_t uMinimumIntegerDigits = 1;
-     uint32_t uMinimumFractionDigits = 0;
-     uint32_t uMaximumFractionDigits = 3;
-     int32_t uMinimumSignificantDigits = -1;
-     int32_t uMaximumSignificantDigits = -1;
-@@ -229,17 +229,17 @@ NewUNumberFormatForPluralRules(JSContext
- 
-         if (!GetProperty(cx, internals, internals, cx->names().maximumFractionDigits, &value))
-             return nullptr;
-         uMaximumFractionDigits = AssertedCast<uint32_t>(value.toInt32());
-     }
- 
-     UErrorCode status = U_ZERO_ERROR;
-     UNumberFormat* nf =
--        unum_open(UNUM_DECIMAL, nullptr, 0, IcuLocale(locale.ptr()), nullptr, &status);
-+        unum_open(UNUM_DECIMAL, nullptr, 0, IcuLocale(locale.get()), nullptr, &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return nullptr;
-     }
-     ScopedICUObject<UNumberFormat, unum_close> toClose(nf);
- 
-     if (uMinimumSignificantDigits != -1) {
-         unum_setAttribute(nf, UNUM_SIGNIFICANT_DIGITS_USED, true);
-@@ -264,17 +264,17 @@ NewUPluralRules(JSContext* cx, Handle<Pl
-     RootedObject internals(cx, intl::GetInternalsObject(cx, pluralRules));
-     if (!internals)
-         return nullptr;
- 
-     RootedValue value(cx);
- 
-     if (!GetProperty(cx, internals, internals, cx->names().locale, &value))
-         return nullptr;
--    JSAutoByteString locale(cx, value.toString());
-+    UniqueChars locale = JS_EncodeString(cx, value.toString());
-     if (!locale)
-         return nullptr;
- 
-     if (!GetProperty(cx, internals, internals, cx->names().type, &value))
-         return nullptr;
- 
-     UPluralType category;
-     {
-@@ -286,17 +286,17 @@ NewUPluralRules(JSContext* cx, Handle<Pl
-             category = UPLURAL_TYPE_CARDINAL;
-         } else {
-             MOZ_ASSERT(StringEqualsAscii(type, "ordinal"));
-             category = UPLURAL_TYPE_ORDINAL;
-         }
-     }
- 
-     UErrorCode status = U_ZERO_ERROR;
--    UPluralRules* pr = uplrules_openForType(IcuLocale(locale.ptr()), category, &status);
-+    UPluralRules* pr = uplrules_openForType(IcuLocale(locale.get()), category, &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return nullptr;
-     }
-     return pr;
- }
- 
- bool
-diff --git a/js/src/builtin/intl/RelativeTimeFormat.cpp b/js/src/builtin/intl/RelativeTimeFormat.cpp
---- a/js/src/builtin/intl/RelativeTimeFormat.cpp
-+++ b/js/src/builtin/intl/RelativeTimeFormat.cpp
-@@ -10,17 +10,17 @@
- 
- #include "mozilla/Assertions.h"
- #include "mozilla/FloatingPoint.h"
- 
- #include "builtin/intl/CommonFunctions.h"
- #include "builtin/intl/ICUStubs.h"
- #include "builtin/intl/ScopedICUObject.h"
- #include "gc/FreeOp.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "vm/GlobalObject.h"
- #include "vm/JSContext.h"
- 
- #include "vm/NativeObject-inl.h"
- 
- using namespace js;
- 
- using mozilla::IsNegativeZero;
-@@ -219,17 +219,17 @@ NewURelativeDateTimeFormatter(JSContext*
-     RootedObject internals(cx, intl::GetInternalsObject(cx, relativeTimeFormat));
-     if (!internals)
-         return nullptr;
- 
-     RootedValue value(cx);
- 
-     if (!GetProperty(cx, internals, internals, cx->names().locale, &value))
-         return nullptr;
--    JSAutoByteString locale(cx, value.toString());
-+    UniqueChars locale = JS_EncodeString(cx, value.toString());
-     if (!locale)
-         return nullptr;
- 
-     if (!GetProperty(cx, internals, internals, cx->names().style, &value))
-         return nullptr;
- 
-     UDateRelativeDateTimeFormatterStyle relDateTimeStyle;
-     {
-@@ -244,17 +244,17 @@ NewURelativeDateTimeFormatter(JSContext*
-         } else {
-             MOZ_ASSERT(StringEqualsAscii(style, "long"));
-             relDateTimeStyle = UDAT_STYLE_LONG;
-         }
-     }
- 
-     UErrorCode status = U_ZERO_ERROR;
-     URelativeDateTimeFormatter* rtf =
--        ureldatefmt_open(IcuLocale(locale.ptr()), nullptr, relDateTimeStyle,
-+        ureldatefmt_open(IcuLocale(locale.get()), nullptr, relDateTimeStyle,
-                          UDISPCTX_CAPITALIZATION_FOR_STANDALONE, &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return nullptr;
-     }
-     return rtf;
- }
- 
-diff --git a/js/src/ctypes/CTypes.cpp b/js/src/ctypes/CTypes.cpp
---- a/js/src/ctypes/CTypes.cpp
-+++ b/js/src/ctypes/CTypes.cpp
-@@ -34,19 +34,20 @@
- #include "jsexn.h"
- #include "jsnum.h"
- 
- #include "builtin/TypedObject.h"
- #include "ctypes/Library.h"
- #include "gc/FreeOp.h"
- #include "gc/Policy.h"
- #include "jit/AtomicOperations.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/StableStringChars.h"
- #include "js/UniquePtr.h"
-+#include "js/Utility.h"
- #include "js/Vector.h"
- #include "util/Windows.h"
- #include "vm/JSContext.h"
- #include "vm/JSFunction.h"
- 
- #include "vm/JSObject-inl.h"
- 
- using namespace std;
-@@ -977,30 +978,32 @@ static const JSErrorFormatString*
- GetErrorMessage(void* userRef, const unsigned errorNumber)
- {
-   if (0 < errorNumber && errorNumber < CTYPESERR_LIMIT)
-     return &ErrorFormatString[errorNumber];
-   return nullptr;
- }
- 
- static const char*
--EncodeLatin1(JSContext* cx, AutoString& str, JSAutoByteString& bytes)
--{
--  return bytes.encodeLatin1(cx, NewUCString(cx, str.finish()));
-+EncodeLatin1(JSContext* cx, AutoString& str, JS::UniqueChars& bytes)
-+{
-+  bytes = JS_EncodeString(cx, NewUCString(cx, str.finish()));
-+  return bytes.get();
- }
- 
- static const char*
--CTypesToSourceForError(JSContext* cx, HandleValue val, JSAutoByteString& bytes)
-+CTypesToSourceForError(JSContext* cx, HandleValue val, JS::UniqueChars& bytes)
- {
-   if (val.isObject()) {
-       RootedObject obj(cx, &val.toObject());
-       if (CType::IsCType(obj) || CData::IsCDataMaybeUnwrap(&obj)) {
-           RootedValue v(cx, ObjectValue(*obj));
-           RootedString str(cx, JS_ValueToSource(cx, v));
--          return bytes.encodeLatin1(cx, str);
-+          bytes = JS_EncodeString(cx, str);
-+          return bytes.get();
-       }
-   }
-   return ValueToSourceForError(cx, val, bytes);
- }
- 
- static void
- BuildCStyleFunctionTypeSource(JSContext* cx, HandleObject typeObj,
-                               HandleString nameStr, unsigned ptrCount,
-@@ -1174,63 +1177,63 @@ BuildTypeSource(JSContext* cx, JSObject*
-                 AutoString& result);
- 
- static bool
- ConvError(JSContext* cx, const char* expectedStr, HandleValue actual,
-           ConversionType convType,
-           HandleObject funObj = nullptr, unsigned argIndex = 0,
-           HandleObject arrObj = nullptr, unsigned arrIndex = 0)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, actual, valBytes);
-   if (!valStr)
-     return false;
- 
-   if (arrObj) {
-     MOZ_ASSERT(CType::IsCType(arrObj));
- 
-     switch (CType::GetTypeCode(arrObj)) {
-     case TYPE_array: {
-       MOZ_ASSERT(!funObj);
- 
-       char indexStr[16];
-       SprintfLiteral(indexStr, "%u", arrIndex);
- 
-       AutoString arrSource;
--      JSAutoByteString arrBytes;
-+      JS::UniqueChars arrBytes;
-       BuildTypeSource(cx, arrObj, true, arrSource);
-       if (!arrSource)
-           return false;
-       const char* arrStr = EncodeLatin1(cx, arrSource, arrBytes);
-       if (!arrStr)
-         return false;
- 
-       JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                                  CTYPESMSG_CONV_ERROR_ARRAY,
-                                  valStr, indexStr, arrStr);
-       break;
-     }
-     case TYPE_struct: {
-       JSFlatString* name = GetFieldName(arrObj, arrIndex);
-       MOZ_ASSERT(name);
--      JSAutoByteString nameBytes;
--      const char* nameStr = nameBytes.encodeLatin1(cx, name);
-+      JS::UniqueChars nameBytes = JS_EncodeString(cx, name);
-+      const char* nameStr = nameBytes.get();
-       if (!nameStr)
-         return false;
- 
-       AutoString structSource;
--      JSAutoByteString structBytes;
-+      JS::UniqueChars structBytes;
-       BuildTypeSource(cx, arrObj, true, structSource);
-       if (!structSource)
-           return false;
-       const char* structStr = EncodeLatin1(cx, structSource, structBytes);
-       if (!structStr)
-         return false;
- 
--      JSAutoByteString posBytes;
-+      JS::UniqueChars posBytes;
-       const char* posStr;
-       if (funObj) {
-         AutoString posSource;
-         BuildConversionPosition(cx, convType, funObj, argIndex, posSource);
-         if (!posSource)
-             return false;
-         posStr = EncodeLatin1(cx, posSource, posBytes);
-         if (!posStr)
-@@ -1253,50 +1256,50 @@ ConvError(JSContext* cx, const char* exp
-   switch (convType) {
-   case ConversionType::Argument: {
-     MOZ_ASSERT(funObj);
- 
-     char indexStr[16];
-     SprintfLiteral(indexStr, "%u", argIndex + 1);
- 
-     AutoString funSource;
--    JSAutoByteString funBytes;
-+    JS::UniqueChars funBytes;
-     BuildFunctionTypeSource(cx, funObj, funSource);
-     if (!funSource)
-         return false;
-     const char* funStr = EncodeLatin1(cx, funSource, funBytes);
-     if (!funStr)
-       return false;
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                                CTYPESMSG_CONV_ERROR_ARG,
-                                valStr, indexStr, funStr);
-     break;
-   }
-   case ConversionType::Finalizer: {
-     MOZ_ASSERT(funObj);
- 
-     AutoString funSource;
--    JSAutoByteString funBytes;
-+    JS::UniqueChars funBytes;
-     BuildFunctionTypeSource(cx, funObj, funSource);
-     if (!funSource)
-         return false;
-     const char* funStr = EncodeLatin1(cx, funSource, funBytes);
-     if (!funStr)
-       return false;
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                                CTYPESMSG_CONV_ERROR_FIN, valStr, funStr);
-     break;
-   }
-   case ConversionType::Return: {
-     MOZ_ASSERT(funObj);
- 
-     AutoString funSource;
--    JSAutoByteString funBytes;
-+    JS::UniqueChars funBytes;
-     BuildFunctionTypeSource(cx, funObj, funSource);
-     if (!funSource)
-         return false;
-     const char* funStr = EncodeLatin1(cx, funSource, funBytes);
-     if (!funStr)
-       return false;
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-@@ -1319,33 +1322,33 @@ static bool
- ConvError(JSContext* cx, HandleObject expectedType, HandleValue actual,
-           ConversionType convType,
-           HandleObject funObj = nullptr, unsigned argIndex = 0,
-           HandleObject arrObj = nullptr, unsigned arrIndex = 0)
- {
-   MOZ_ASSERT(CType::IsCType(expectedType));
- 
-   AutoString expectedSource;
--  JSAutoByteString expectedBytes;
-+  JS::UniqueChars expectedBytes;
-   BuildTypeSource(cx, expectedType, true, expectedSource);
-   if (!expectedSource)
-       return false;
-   const char* expectedStr = EncodeLatin1(cx, expectedSource, expectedBytes);
-   if (!expectedStr)
-     return false;
- 
-   return ConvError(cx, expectedStr, actual, convType, funObj, argIndex,
-                    arrObj, arrIndex);
- }
- 
- static bool
- ArgumentConvError(JSContext* cx, HandleValue actual, const char* funStr,
-                   unsigned argIndex)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, actual, valBytes);
-   if (!valStr)
-     return false;
- 
-   char indexStr[16];
-   SprintfLiteral(indexStr, "%u", argIndex + 1);
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-@@ -1364,28 +1367,28 @@ ArgumentLengthError(JSContext* cx, const
- 
- static bool
- ArrayLengthMismatch(JSContext* cx, unsigned expectedLength, HandleObject arrObj,
-                     unsigned actualLength, HandleValue actual,
-                     ConversionType convType)
- {
-   MOZ_ASSERT(arrObj && CType::IsCType(arrObj));
- 
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, actual, valBytes);
-   if (!valStr)
-     return false;
- 
-   char expectedLengthStr[16];
-   SprintfLiteral(expectedLengthStr, "%u", expectedLength);
-   char actualLengthStr[16];
-   SprintfLiteral(actualLengthStr, "%u", actualLength);
- 
-   AutoString arrSource;
--  JSAutoByteString arrBytes;
-+  JS::UniqueChars arrBytes;
-   BuildTypeSource(cx, arrObj, true, arrSource);
-   if (!arrSource)
-       return false;
-   const char* arrStr = EncodeLatin1(cx, arrSource, arrBytes);
-   if (!arrStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-@@ -1396,28 +1399,28 @@ ArrayLengthMismatch(JSContext* cx, unsig
- 
- static bool
- ArrayLengthOverflow(JSContext* cx, unsigned expectedLength, HandleObject arrObj,
-                     unsigned actualLength, HandleValue actual,
-                     ConversionType convType)
- {
-   MOZ_ASSERT(arrObj && CType::IsCType(arrObj));
- 
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, actual, valBytes);
-   if (!valStr)
-     return false;
- 
-   char expectedLengthStr[16];
-   SprintfLiteral(expectedLengthStr, "%u", expectedLength);
-   char actualLengthStr[16];
-   SprintfLiteral(actualLengthStr, "%u", actualLength);
- 
-   AutoString arrSource;
--  JSAutoByteString arrBytes;
-+  JS::UniqueChars arrBytes;
-   BuildTypeSource(cx, arrObj, true, arrSource);
-   if (!arrSource)
-       return false;
-   const char* arrStr = EncodeLatin1(cx, arrSource, arrBytes);
-   if (!arrStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-@@ -1449,18 +1452,18 @@ CannotConstructError(JSContext* cx, cons
-   JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr,
-                             CTYPESMSG_CANNOT_CONSTRUCT, type);
-   return false;
- }
- 
- static bool
- DuplicateFieldError(JSContext* cx, Handle<JSFlatString*> name)
- {
--  JSAutoByteString nameBytes;
--  const char* nameStr = nameBytes.encodeLatin1(cx, name);
-+  JS::UniqueChars nameBytes = JS_EncodeString(cx, name);
-+  const char* nameStr = nameBytes.get();
-   if (!nameStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_DUPLICATE_FIELD, nameStr);
-   return false;
- }
- 
-@@ -1471,17 +1474,17 @@ EmptyFinalizerCallError(JSContext* cx, c
-                             CTYPESMSG_EMPTY_FIN_CALL, funName);
-   return false;
- }
- 
- static bool
- EmptyFinalizerError(JSContext* cx, ConversionType convType,
-                     HandleObject funObj = nullptr, unsigned argIndex = 0)
- {
--  JSAutoByteString posBytes;
-+  JS::UniqueChars posBytes;
-   const char* posStr;
-   if (funObj) {
-     AutoString posSource;
-     BuildConversionPosition(cx, convType, funObj, argIndex, posSource);
-     if (!posSource)
-         return false;
-     posStr = EncodeLatin1(cx, posSource, posBytes);
-     if (!posStr)
-@@ -1499,36 +1502,36 @@ static bool
- FieldCountMismatch(JSContext* cx,
-                    unsigned expectedCount, HandleObject structObj,
-                    unsigned actualCount, HandleValue actual,
-                    ConversionType convType,
-                    HandleObject funObj = nullptr, unsigned argIndex = 0)
- {
-   MOZ_ASSERT(structObj && CType::IsCType(structObj));
- 
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, actual, valBytes);
-   if (!valStr)
-     return false;
- 
-   AutoString structSource;
--  JSAutoByteString structBytes;
-+  JS::UniqueChars structBytes;
-   BuildTypeSource(cx, structObj, true, structSource);
-   if (!structSource)
-       return false;
-   const char* structStr = EncodeLatin1(cx, structSource, structBytes);
-   if (!structStr)
-     return false;
- 
-   char expectedCountStr[16];
-   SprintfLiteral(expectedCountStr, "%u", expectedCount);
-   char actualCountStr[16];
-   SprintfLiteral(actualCountStr, "%u", actualCount);
- 
--  JSAutoByteString posBytes;
-+  JS::UniqueChars posBytes;
-   const char* posStr;
-   if (funObj) {
-     AutoString posSource;
-     BuildConversionPosition(cx, convType, funObj, argIndex, posSource);
-     if (!posSource)
-         return false;
-     posStr = EncodeLatin1(cx, posSource, posBytes);
-     if (!posStr)
-@@ -1542,127 +1545,127 @@ FieldCountMismatch(JSContext* cx,
-                              valStr, structStr, expectedCountStr, actualCountStr,
-                              posStr);
-   return false;
- }
- 
- static bool
- FieldDescriptorCountError(JSContext* cx, HandleValue typeVal, size_t length)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, typeVal, valBytes);
-   if (!valStr)
-     return false;
- 
-   char lengthStr[16];
-   SprintfLiteral(lengthStr, "%zu", length);
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_FIELD_DESC_COUNT, valStr, lengthStr);
-   return false;
- }
- 
- static bool
- FieldDescriptorNameError(JSContext* cx, HandleId id)
- {
--  JSAutoByteString idBytes;
-+  JS::UniqueChars idBytes;
-   RootedValue idVal(cx, IdToValue(id));
-   const char* propStr = CTypesToSourceForError(cx, idVal, idBytes);
-   if (!propStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_FIELD_DESC_NAME, propStr);
-   return false;
- }
- 
- static bool
- FieldDescriptorSizeError(JSContext* cx, HandleObject typeObj, HandleId id)
- {
-   RootedValue typeVal(cx, ObjectValue(*typeObj));
--  JSAutoByteString typeBytes;
-+  JS::UniqueChars typeBytes;
-   const char* typeStr = CTypesToSourceForError(cx, typeVal, typeBytes);
-   if (!typeStr)
-     return false;
- 
-   RootedString idStr(cx, IdToString(cx, id));
--  JSAutoByteString idBytes;
--  const char* propStr = idBytes.encodeLatin1(cx, idStr);
-+  JS::UniqueChars idBytes = JS_EncodeString(cx, idStr);
-+  const char* propStr = idBytes.get();
-   if (!propStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_FIELD_DESC_SIZE, typeStr, propStr);
-   return false;
- }
- 
- static bool
- FieldDescriptorNameTypeError(JSContext* cx, HandleValue typeVal)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, typeVal, valBytes);
-   if (!valStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_FIELD_DESC_NAMETYPE, valStr);
-   return false;
- }
- 
- static bool
- FieldDescriptorTypeError(JSContext* cx, HandleValue poroVal, HandleId id)
- {
--  JSAutoByteString typeBytes;
-+  JS::UniqueChars typeBytes;
-   const char* typeStr = CTypesToSourceForError(cx, poroVal, typeBytes);
-   if (!typeStr)
-     return false;
- 
-   RootedString idStr(cx, IdToString(cx, id));
--  JSAutoByteString idBytes;
--  const char* propStr = idBytes.encodeLatin1(cx, idStr);
-+  JS::UniqueChars idBytes = JS_EncodeString(cx, idStr);
-+  const char* propStr = idBytes.get();
-   if (!propStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_FIELD_DESC_TYPE, typeStr, propStr);
-   return false;
- }
- 
- static bool
- FieldMissingError(JSContext* cx, JSObject* typeObj, JSFlatString* name_)
- {
--  JSAutoByteString typeBytes;
-+  JS::UniqueChars typeBytes;
-   RootedString name(cx, name_);
-   RootedValue typeVal(cx, ObjectValue(*typeObj));
-   const char* typeStr = CTypesToSourceForError(cx, typeVal, typeBytes);
-   if (!typeStr)
-     return false;
- 
--  JSAutoByteString nameBytes;
--  const char* nameStr = nameBytes.encodeLatin1(cx, name);
-+  JS::UniqueChars nameBytes = JS_EncodeString(cx, name);
-+  const char* nameStr = nameBytes.get();
-   if (!nameStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_FIELD_MISSING, typeStr, nameStr);
-   return false;
- }
- 
- static bool
- FinalizerSizeError(JSContext* cx, HandleObject funObj, HandleValue actual)
- {
-   MOZ_ASSERT(CType::IsCType(funObj));
- 
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, actual, valBytes);
-   if (!valStr)
-     return false;
- 
-   AutoString funSource;
--  JSAutoByteString funBytes;
-+  JS::UniqueChars funBytes;
-   BuildFunctionTypeSource(cx, funObj, funSource);
-   if (!funSource)
-       return false;
-   const char* funStr = EncodeLatin1(cx, funSource, funBytes);
-   if (!funStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-@@ -1672,17 +1675,17 @@ FinalizerSizeError(JSContext* cx, Handle
- 
- static bool
- FunctionArgumentLengthMismatch(JSContext* cx,
-                                unsigned expectedCount, unsigned actualCount,
-                                HandleObject funObj, HandleObject typeObj,
-                                bool isVariadic)
- {
-   AutoString funSource;
--  JSAutoByteString funBytes;
-+  JS::UniqueChars funBytes;
-   Value slot = JS_GetReservedSlot(funObj, SLOT_REFERENT);
-   if (!slot.isUndefined() && Library::IsLibrary(&slot.toObject())) {
-     BuildFunctionTypeSource(cx, funObj, funSource);
-   } else {
-     BuildFunctionTypeSource(cx, typeObj, funSource);
-   }
-   if (!funSource)
-       return false;
-@@ -1703,47 +1706,47 @@ FunctionArgumentLengthMismatch(JSContext
-                              actualCountStr);
-   return false;
- }
- 
- static bool
- FunctionArgumentTypeError(JSContext* cx,
-                           uint32_t index, HandleValue typeVal, const char* reason)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, typeVal, valBytes);
-   if (!valStr)
-     return false;
- 
-   char indexStr[16];
-   SprintfLiteral(indexStr, "%u", index + 1);
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_ARG_TYPE_ERROR,
-                              indexStr, reason, valStr);
-   return false;
- }
- 
- static bool
- FunctionReturnTypeError(JSContext* cx, HandleValue type, const char* reason)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, type, valBytes);
-   if (!valStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_RET_TYPE_ERROR, reason, valStr);
-   return false;
- }
- 
- static bool
- IncompatibleCallee(JSContext* cx, const char* funName, HandleObject actualObj)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   RootedValue val(cx, ObjectValue(*actualObj));
-   const char* valStr = CTypesToSourceForError(cx, val, valBytes);
-   if (!valStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_INCOMPATIBLE_CALLEE, funName, valStr);
-   return false;
-@@ -1757,17 +1760,17 @@ IncompatibleThisProto(JSContext* cx, con
-                              CTYPESMSG_INCOMPATIBLE_THIS,
-                              funName, actualType);
-   return false;
- }
- 
- static bool
- IncompatibleThisProto(JSContext* cx, const char* funName, HandleValue actualVal)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, actualVal, valBytes);
-   if (!valStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_INCOMPATIBLE_THIS_VAL,
-                              funName, "incompatible object", valStr);
-   return false;
-@@ -1781,31 +1784,31 @@ IncompatibleThisType(JSContext* cx, cons
-                             funName, actualType);
-   return false;
- }
- 
- static bool
- IncompatibleThisType(JSContext* cx, const char* funName, const char* actualType,
-                      HandleValue actualVal)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, actualVal, valBytes);
-   if (!valStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_INCOMPATIBLE_THIS_VAL,
-                              funName, actualType, valStr);
-   return false;
- }
- 
- static bool
- InvalidIndexError(JSContext* cx, HandleValue val)
- {
--  JSAutoByteString idBytes;
-+  JS::UniqueChars idBytes;
-   const char* indexStr = CTypesToSourceForError(cx, val, idBytes);
-   if (!indexStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_INVALID_INDEX, indexStr);
-   return false;
- }
-@@ -1832,73 +1835,73 @@ InvalidIndexRangeError(JSContext* cx, si
- }
- 
- static bool
- NonPrimitiveError(JSContext* cx, HandleObject typeObj)
- {
-   MOZ_ASSERT(CType::IsCType(typeObj));
- 
-   AutoString typeSource;
--  JSAutoByteString typeBytes;
-+  JS::UniqueChars typeBytes;
-   BuildTypeSource(cx, typeObj, true, typeSource);
-   if (!typeSource)
-       return false;
-   const char* typeStr = EncodeLatin1(cx, typeSource, typeBytes);
-   if (!typeStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_NON_PRIMITIVE, typeStr);
-   return false;
- }
- 
- static bool
- NonStringBaseError(JSContext* cx, HandleValue thisVal)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, thisVal, valBytes);
-   if (!valStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_NON_STRING_BASE, valStr);
-   return false;
- }
- 
- static bool
- NullPointerError(JSContext* cx, const char* action, HandleObject obj)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   RootedValue val(cx, ObjectValue(*obj));
-   const char* valStr = CTypesToSourceForError(cx, val, valBytes);
-   if (!valStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_NULL_POINTER, action, valStr);
-   return false;
- }
- 
- static bool
- PropNameNonStringError(JSContext* cx, HandleId id, HandleValue actual,
-                        ConversionType convType,
-                        HandleObject funObj = nullptr, unsigned argIndex = 0)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, actual, valBytes);
-   if (!valStr)
-     return false;
- 
--  JSAutoByteString idBytes;
-+  JS::UniqueChars idBytes;
-   RootedValue idVal(cx, IdToValue(id));
-   const char* propStr = CTypesToSourceForError(cx, idVal, idBytes);
-   if (!propStr)
-     return false;
- 
--  JSAutoByteString posBytes;
-+  JS::UniqueChars posBytes;
-   const char* posStr;
-   if (funObj) {
-     AutoString posSource;
-     BuildConversionPosition(cx, convType, funObj, argIndex, posSource);
-     if (!posSource)
-         return false;
-     posStr = EncodeLatin1(cx, posSource, posBytes);
-     if (!posStr)
-@@ -1918,44 +1921,44 @@ SizeOverflow(JSContext* cx, const char* 
-   JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr,
-                             CTYPESMSG_SIZE_OVERFLOW, name, limit);
-   return false;
- }
- 
- static bool
- TypeError(JSContext* cx, const char* expected, HandleValue actual)
- {
--  JSAutoByteString bytes;
-+  JS::UniqueChars bytes;
-   const char* src = CTypesToSourceForError(cx, actual, bytes);
-   if (!src)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_TYPE_ERROR, expected, src);
-   return false;
- }
- 
- static bool
- TypeOverflow(JSContext* cx, const char* expected, HandleValue actual)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, actual, valBytes);
-   if (!valStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_TYPE_OVERFLOW, valStr, expected);
-   return false;
- }
- 
- static bool
- UndefinedSizeCastError(JSContext* cx, HandleObject targetTypeObj)
- {
-   AutoString targetTypeSource;
--  JSAutoByteString targetTypeBytes;
-+  JS::UniqueChars targetTypeBytes;
-   BuildTypeSource(cx, targetTypeObj, true, targetTypeSource);
-   if (!targetTypeSource)
-       return false;
-   const char* targetTypeStr = EncodeLatin1(cx, targetTypeSource, targetTypeBytes);
-   if (!targetTypeStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-@@ -1964,26 +1967,26 @@ UndefinedSizeCastError(JSContext* cx, Ha
- }
- 
- static bool
- SizeMismatchCastError(JSContext* cx,
-                       HandleObject sourceTypeObj, HandleObject targetTypeObj,
-                       size_t sourceSize, size_t targetSize)
- {
-   AutoString sourceTypeSource;
--  JSAutoByteString sourceTypeBytes;
-+  JS::UniqueChars sourceTypeBytes;
-   BuildTypeSource(cx, sourceTypeObj, true, sourceTypeSource);
-   if (!sourceTypeSource)
-       return false;
-   const char* sourceTypeStr = EncodeLatin1(cx, sourceTypeSource, sourceTypeBytes);
-   if (!sourceTypeStr)
-     return false;
- 
-   AutoString targetTypeSource;
--  JSAutoByteString targetTypeBytes;
-+  JS::UniqueChars targetTypeBytes;
-   BuildTypeSource(cx, targetTypeObj, true, targetTypeSource);
-   if (!targetTypeSource)
-       return false;
-   const char* targetTypeStr = EncodeLatin1(cx, targetTypeSource, targetTypeBytes);
-   if (!targetTypeStr)
-     return false;
- 
-   char sourceSizeStr[16];
-@@ -1996,31 +1999,31 @@ SizeMismatchCastError(JSContext* cx,
-                              targetTypeStr, sourceTypeStr,
-                              targetSizeStr, sourceSizeStr);
-   return false;
- }
- 
- static bool
- UndefinedSizePointerError(JSContext* cx, const char* action, HandleObject obj)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   RootedValue val(cx, ObjectValue(*obj));
-   const char* valStr = CTypesToSourceForError(cx, val, valBytes);
-   if (!valStr)
-     return false;
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                              CTYPESMSG_UNDEFINED_SIZE, action, valStr);
-   return false;
- }
- 
- static bool
- VariadicArgumentTypeError(JSContext* cx, uint32_t index, HandleValue actual)
- {
--  JSAutoByteString valBytes;
-+  JS::UniqueChars valBytes;
-   const char* valStr = CTypesToSourceForError(cx, actual, valBytes);
-   if (!valStr)
-     return false;
- 
-   char indexStr[16];
-   SprintfLiteral(indexStr, "%u", index + 1);
- 
-   JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-diff --git a/js/src/ctypes/Library.cpp b/js/src/ctypes/Library.cpp
---- a/js/src/ctypes/Library.cpp
-+++ b/js/src/ctypes/Library.cpp
-@@ -5,17 +5,17 @@
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "ctypes/Library.h"
- 
- #include "prerror.h"
- #include "prlink.h"
- 
- #include "ctypes/CTypes.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/StableStringChars.h"
- 
- using JS::AutoStableStringChars;
- 
- namespace js {
- namespace ctypes {
- 
- /*******************************************************************************
-@@ -164,23 +164,23 @@ Library::Create(JSContext* cx, HandleVal
- #define MAX_ERROR_LEN 1024
-     char error[MAX_ERROR_LEN] = "Cannot get error from NSPR.";
-     uint32_t errorLen = PR_GetErrorTextLength();
-     if (errorLen && errorLen < MAX_ERROR_LEN)
-       PR_GetErrorText(error);
- #undef MAX_ERROR_LEN
- 
-     if (JS::StringIsASCII(error)) {
--      JSAutoByteString pathCharsUTF8;
--      if (pathCharsUTF8.encodeUtf8(cx, pathStr))
--        JS_ReportErrorUTF8(cx, "couldn't open library %s: %s", pathCharsUTF8.ptr(), error);
-+      JS::UniqueChars pathCharsUTF8 = JS_EncodeStringToUTF8(cx, pathStr);
-+      if (pathCharsUTF8)
-+        JS_ReportErrorUTF8(cx, "couldn't open library %s: %s", pathCharsUTF8.get(), error);
-     } else {
--      JSAutoByteString pathCharsLatin1;
--      if (pathCharsLatin1.encodeLatin1(cx, pathStr))
--        JS_ReportErrorLatin1(cx, "couldn't open library %s: %s", pathCharsLatin1.ptr(), error);
-+      JS::UniqueChars pathCharsLatin1 = JS_EncodeString(cx, pathStr);
-+      if (pathCharsLatin1)
-+        JS_ReportErrorLatin1(cx, "couldn't open library %s: %s", pathCharsLatin1.get(), error);
-     }
-     return nullptr;
-   }
- 
-   // stash the library
-   JS_SetReservedSlot(libraryObj, SLOT_LIBRARY, PrivateValue(library));
- 
-   return libraryObj;
-diff --git a/js/src/frontend/EmitterScope.cpp b/js/src/frontend/EmitterScope.cpp
---- a/js/src/frontend/EmitterScope.cpp
-+++ b/js/src/frontend/EmitterScope.cpp
-@@ -3,17 +3,16 @@
-  * This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "frontend/EmitterScope.h"
- 
- #include "frontend/BytecodeEmitter.h"
- #include "frontend/TDZCheckCache.h"
--#include "js/AutoByteString.h"
- 
- #include "vm/GlobalObject.h"
- 
- using namespace js;
- using namespace js::frontend;
- 
- using mozilla::DebugOnly;
- using mozilla::Maybe;
-@@ -395,23 +394,23 @@ EmitterScope::deadZoneFrameSlotRange(Byt
- void
- EmitterScope::dump(BytecodeEmitter* bce)
- {
-     fprintf(stdout, "EmitterScope [%s] %p\n", ScopeKindString(scope(bce)->kind()), this);
- 
-     for (NameLocationMap::Range r = nameCache_->all(); !r.empty(); r.popFront()) {
-         const NameLocation& l = r.front().value();
- 
--        JSAutoByteString bytes;
-+        UniqueChars bytes;
-         if (!AtomToPrintableString(bce->cx, r.front().key(), &bytes))
-             return;
-         if (l.kind() != NameLocation::Kind::Dynamic)
--            fprintf(stdout, "  %s %s ", BindingKindString(l.bindingKind()), bytes.ptr());
-+            fprintf(stdout, "  %s %s ", BindingKindString(l.bindingKind()), bytes.get());
-         else
--            fprintf(stdout, "  %s ", bytes.ptr());
-+            fprintf(stdout, "  %s ", bytes.get());
- 
-         switch (l.kind()) {
-           case NameLocation::Kind::Dynamic:
-             fprintf(stdout, "dynamic\n");
-             break;
-           case NameLocation::Kind::Global:
-             fprintf(stdout, "global\n");
-             break;
-diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
---- a/js/src/frontend/Parser.cpp
-+++ b/js/src/frontend/Parser.cpp
-@@ -32,17 +32,16 @@
- #include "jstypes.h"
- 
- #include "builtin/ModuleObject.h"
- #include "builtin/SelfHostingDefines.h"
- #include "frontend/BytecodeCompiler.h"
- #include "frontend/FoldConstants.h"
- #include "frontend/TokenStream.h"
- #include "irregexp/RegExpParser.h"
--#include "js/AutoByteString.h"
- #include "vm/BytecodeUtil.h"
- #include "vm/JSAtom.h"
- #include "vm/JSContext.h"
- #include "vm/JSFunction.h"
- #include "vm/JSScript.h"
- #include "vm/RegExpObject.h"
- #include "vm/StringType.h"
- #include "wasm/AsmJS.h"
-@@ -166,23 +165,23 @@ void
- ParseContext::Scope::dump(ParseContext* pc)
- {
-     JSContext* cx = pc->sc()->context;
- 
-     fprintf(stdout, "ParseScope %p", this);
- 
-     fprintf(stdout, "\n  decls:\n");
-     for (DeclaredNameMap::Range r = declared_->all(); !r.empty(); r.popFront()) {
--        JSAutoByteString bytes;
-+        UniqueChars bytes;
-         if (!AtomToPrintableString(cx, r.front().key(), &bytes))
-             return;
-         DeclaredNameInfo& info = r.front().value().wrapped;
-         fprintf(stdout, "    %s %s%s\n",
-                 DeclarationKindString(info.kind()),
--                bytes.ptr(),
-+                bytes.get(),
-                 info.closedOver() ? " (closed over)" : "");
-     }
- 
-     fprintf(stdout, "\n");
- }
- 
- bool
- ParseContext::Scope::addPossibleAnnexBFunctionBox(ParseContext* pc, FunctionBox* funbox)
-@@ -1222,22 +1221,22 @@ GeneralParser<ParseHandler, CharT>::repo
- }
- 
- template <class ParseHandler, typename CharT>
- void
- GeneralParser<ParseHandler, CharT>::reportRedeclaration(HandlePropertyName name,
-                                                         DeclarationKind prevKind,
-                                                         TokenPos pos, uint32_t prevPos)
- {
--    JSAutoByteString bytes;
-+    UniqueChars bytes;
-     if (!AtomToPrintableString(context, name, &bytes))
-         return;
- 
-     if (prevPos == DeclaredNameInfo::npos) {
--        errorAt(pos.begin, JSMSG_REDECLARED_VAR, DeclarationKindString(prevKind), bytes.ptr());
-+        errorAt(pos.begin, JSMSG_REDECLARED_VAR, DeclarationKindString(prevKind), bytes.get());
-         return;
-     }
- 
-     auto notes = MakeUnique<JSErrorNotes>();
-     if (!notes) {
-         ReportOutOfMemory(pc->sc()->context);
-         return;
-     }
-@@ -1256,17 +1255,17 @@ GeneralParser<ParseHandler, CharT>::repo
-                              GetErrorMessage, nullptr,
-                              JSMSG_REDECLARED_PREV,
-                              lineNumber, columnNumber))
-     {
-         return;
-     }
- 
-     errorWithNotesAt(std::move(notes), pos.begin, JSMSG_REDECLARED_VAR,
--                     DeclarationKindString(prevKind), bytes.ptr());
-+                     DeclarationKindString(prevKind), bytes.get());
- }
- 
- // notePositionalFormalParameter is called for both the arguments of a regular
- // function definition and the arguments specified by the Function
- // constructor.
- //
- // The 'disallowDuplicateParams' bool indicates whether the use of another
- // feature (destructuring or default arguments) disables duplicate arguments.
-@@ -1286,20 +1285,20 @@ GeneralParser<ParseHandler, CharT>::note
-             return false;
-         }
- 
-         // Strict-mode disallows duplicate args. We may not know whether we are
-         // in strict mode or not (since the function body hasn't been parsed).
-         // In such cases, report will queue up the potential error and return
-         // 'true'.
-         if (pc->sc()->needStrictChecks()) {
--            JSAutoByteString bytes;
-+            UniqueChars bytes;
-             if (!AtomToPrintableString(context, name, &bytes))
-                 return false;
--            if (!strictModeError(JSMSG_DUPLICATE_FORMAL, bytes.ptr()))
-+            if (!strictModeError(JSMSG_DUPLICATE_FORMAL, bytes.get()))
-                 return false;
-         }
- 
-         *duplicatedParam = true;
-     } else {
-         DeclarationKind kind = DeclarationKind::PositionalFormalParameter;
-         if (!pc->functionScope().addDeclaredName(pc, p, name, kind, beginPos))
-             return false;
-@@ -2421,21 +2420,21 @@ Parser<FullParseHandler, CharT>::moduleB
- 
-     // Check exported local bindings exist and mark them as closed over.
-     for (auto entry : modulesc->builder.localExportEntries()) {
-         JSAtom* name = entry->localName();
-         MOZ_ASSERT(name);
- 
-         DeclaredNamePtr p = modulepc.varScope().lookupDeclaredName(name);
-         if (!p) {
--            JSAutoByteString str;
-+            UniqueChars str;
-             if (!AtomToPrintableString(context, name, &str))
-                 return null();
- 
--            errorAt(TokenStream::NoOffset, JSMSG_MISSING_EXPORT, str.ptr());
-+            errorAt(TokenStream::NoOffset, JSMSG_MISSING_EXPORT, str.get());
-             return null();
-         }
- 
-         p->value()->setClosedOver();
-     }
- 
-     if (!FoldConstants(context, &pn, this))
-         return null();
-@@ -5459,21 +5458,21 @@ GeneralParser<ParseHandler, CharT>::impo
- 
- template<typename CharT>
- bool
- Parser<FullParseHandler, CharT>::checkExportedName(JSAtom* exportName)
- {
-     if (!pc->sc()->asModuleContext()->builder.hasExportedName(exportName))
-         return true;
- 
--    JSAutoByteString str;
-+    UniqueChars str;
-     if (!AtomToPrintableString(context, exportName, &str))
-         return false;
- 
--    error(JSMSG_DUPLICATE_EXPORT_NAME, str.ptr());
-+    error(JSMSG_DUPLICATE_EXPORT_NAME, str.get());
-     return false;
- }
- 
- template<typename CharT>
- inline bool
- Parser<SyntaxParseHandler, CharT>::checkExportedName(JSAtom* exportName)
- {
-     MOZ_ALWAYS_FALSE(abortIfSyntaxParser());
-diff --git a/js/src/jsapi-tests/tests.h b/js/src/jsapi-tests/tests.h
---- a/js/src/jsapi-tests/tests.h
-+++ b/js/src/jsapi-tests/tests.h
-@@ -12,17 +12,17 @@
- 
- #include <errno.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- 
- #include "gc/GC.h"
- #include "js/AllocPolicy.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/Vector.h"
- #include "vm/JSContext.h"
- 
- /* Note: Aborts on OOM. */
- class JSAPITestString {
-     js::Vector<char, 0, js::SystemAllocPolicy> chars;
- 
-   public:
-@@ -100,19 +100,18 @@ class JSAPITest
- 
- #define EVAL(s, vp) do { if (!evaluate(s, __FILE__, __LINE__, vp)) return false; } while (false)
- 
-     bool evaluate(const char* bytes, const char* filename, int lineno, JS::MutableHandleValue vp);
- 
-     JSAPITestString jsvalToSource(JS::HandleValue v) {
-         JSString* str = JS_ValueToSource(cx, v);
-         if (str) {
--            JSAutoByteString bytes(cx, str);
--            if (!!bytes)
--                return JSAPITestString(bytes.ptr());
-+            if (JS::UniqueChars bytes = JS_EncodeString(cx, str))
-+                return JSAPITestString(bytes.get());
-         }
-         JS_ClearPendingException(cx);
-         return JSAPITestString("<<error converting value to string>>");
-     }
- 
-     JSAPITestString toSource(long v) {
-         char buf[40];
-         sprintf(buf, "%ld", v);
-@@ -228,19 +227,18 @@ class JSAPITest
- 
-         if (JS_IsExceptionPending(cx)) {
-             js::gc::AutoSuppressGC gcoff(cx);
-             JS::RootedValue v(cx);
-             JS_GetPendingException(cx, &v);
-             JS_ClearPendingException(cx);
-             JSString* s = JS::ToString(cx, v);
-             if (s) {
--                JSAutoByteString bytes(cx, s);
--                if (!!bytes)
--                    message += bytes.ptr();
-+                if (JS::UniqueChars bytes = JS_EncodeString(cx, s))
-+                    message += bytes.get();
-             }
-         }
- 
-         fprintf(stderr, "%.*s\n", int(message.length()), message.begin());
- 
-         if (msgs.length() != 0)
-             msgs += " | ";
-         msgs += message;
-@@ -268,21 +266,20 @@ class JSAPITest
-     print(JSContext* cx, unsigned argc, JS::Value* vp)
-     {
-         JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
- 
-         for (unsigned i = 0; i < args.length(); i++) {
-             JSString* str = JS::ToString(cx, args[i]);
-             if (!str)
-                 return false;
--            char* bytes = JS_EncodeString(cx, str);
-+            JS::UniqueChars bytes = JS_EncodeString(cx, str);
-             if (!bytes)
-                 return false;
--            printf("%s%s", i ? " " : "", bytes);
--            JS_free(cx, bytes);
-+            printf("%s%s", i ? " " : "", bytes.get());
-         }
- 
-         putchar('\n');
-         fflush(stdout);
-         args.rval().setUndefined();
-         return true;
-     }
- 
-diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
---- a/js/src/jsapi.cpp
-+++ b/js/src/jsapi.cpp
-@@ -50,17 +50,16 @@
- #include "frontend/Parser.h" // for JS_BufferIsCompileableUnit
- #include "gc/FreeOp.h"
- #include "gc/Marking.h"
- #include "gc/Policy.h"
- #include "gc/PublicIterators.h"
- #include "gc/WeakMap.h"
- #include "jit/JitCommon.h"
- #include "jit/JitSpewer.h"
--#include "js/AutoByteString.h"
- #include "js/CharacterEncoding.h"
- #include "js/CompilationAndEvaluation.h"
- #include "js/CompileOptions.h"
- #include "js/Conversions.h"
- #include "js/Date.h"
- #include "js/Initialization.h"
- #include "js/JSON.h"
- #include "js/LocaleSensitive.h"
-@@ -176,38 +175,38 @@ JS::ObjectOpResult::reportStrictErrorOrW
-     }
- 
-     if (ErrorTakesArguments(code_)) {
-         RootedValue idv(cx, IdToValue(id));
-         RootedString str(cx, ValueToSource(cx, idv));
-         if (!str)
-             return false;
- 
--        JSAutoByteString propName;
--        if (!propName.encodeUtf8(cx, str))
-+        UniqueChars propName = JS_EncodeStringToUTF8(cx, str);
-+        if (!propName)
-             return false;
- 
-         if (code_ == JSMSG_SET_NON_OBJECT_RECEIVER) {
-             // We know that the original receiver was a primitive, so unbox it.
-             RootedValue val(cx, ObjectValue(*obj));
-             if (!obj->is<ProxyObject>()) {
-                 if (!Unbox(cx, obj, &val))
-                     return false;
-             }
-             return ReportValueErrorFlags(cx, flags, code_, JSDVG_IGNORE_STACK, val,
--                                         nullptr, propName.ptr(), nullptr);
-+                                         nullptr, propName.get(), nullptr);
-         }
- 
-         if (ErrorTakesObjectArgument(code_)) {
-             return JS_ReportErrorFlagsAndNumberUTF8(cx, flags, GetErrorMessage, nullptr, code_,
--                                                    obj->getClass()->name, propName.ptr());
-+                                                    obj->getClass()->name, propName.get());
-         }
- 
-         return JS_ReportErrorFlagsAndNumberUTF8(cx, flags, GetErrorMessage, nullptr, code_,
--                                                propName.ptr());
-+                                                propName.get());
-     }
-     return JS_ReportErrorFlagsAndNumberASCII(cx, flags, GetErrorMessage, nullptr, code_);
- }
- 
- JS_PUBLIC_API(bool)
- JS::ObjectOpResult::reportStrictErrorOrWarning(JSContext* cx, HandleObject obj, bool strict)
- {
-     MOZ_ASSERT(code_ != Uninitialized);
-@@ -1644,17 +1643,17 @@ JS::GetFirstArgumentAsTypeHint(JSContext
- 
-     if (!EqualStrings(cx, str, cx->names().number, &match))
-         return false;
-     if (match) {
-         *result = JSTYPE_NUMBER;
-         return true;
-     }
- 
--    JSAutoByteString bytes;
-+    UniqueChars bytes;
-     const char* source = ValueToSourceForError(cx, args.get(0), bytes);
-     if (!source) {
-         ReportOutOfMemory(cx);
-         return false;
-     }
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_NOT_EXPECTED_TYPE,
-                                "Symbol.toPrimitive",
-@@ -5061,30 +5060,28 @@ JS::GetPromiseResolutionSite(JS::HandleO
- }
- 
- #ifdef DEBUG
- JS_PUBLIC_API(void)
- JS::DumpPromiseAllocationSite(JSContext* cx, JS::HandleObject promise)
- {
-     RootedObject stack(cx, promise->as<PromiseObject>().allocationSite());
-     JSPrincipals* principals = cx->realm()->principals();
--    UniqueChars stackStr(
--        reinterpret_cast<char*>(BuildUTF8StackString(cx, principals, stack).get()));
--    if (stackStr.get())
-+    UniqueChars stackStr = BuildUTF8StackString(cx, principals, stack);
-+    if (stackStr)
-         fputs(stackStr.get(), stderr);
- }
- 
- JS_PUBLIC_API(void)
- JS::DumpPromiseResolutionSite(JSContext* cx, JS::HandleObject promise)
- {
-     RootedObject stack(cx, promise->as<PromiseObject>().resolutionSite());
-     JSPrincipals* principals = cx->realm()->principals();
--    UniqueChars stackStr(
--        reinterpret_cast<char*>(BuildUTF8StackString(cx, principals, stack).get()));
--    if (stackStr.get())
-+    UniqueChars stackStr = BuildUTF8StackString(cx, principals, stack);
-+    if (stackStr)
-         fputs(stackStr.get(), stderr);
- }
- #endif
- 
- JS_PUBLIC_API(JSObject*)
- JS::CallOriginalPromiseResolve(JSContext* cx, JS::HandleValue resolutionValue)
- {
-     AssertHeapIsIdle();
-@@ -6050,32 +6047,32 @@ JS_DecodeBytes(JSContext* cx, const char
-         return false;
-     }
- 
-     CopyAndInflateChars(dst, src, srclen);
-     *dstlenp = srclen;
-     return true;
- }
- 
--JS_PUBLIC_API(char*)
-+JS_PUBLIC_API(JS::UniqueChars)
- JS_EncodeString(JSContext* cx, JSString* str)
- {
-     AssertHeapIsIdle();
-     CHECK_THREAD(cx);
- 
--    return js::EncodeLatin1(cx, str).release();
--}
--
--JS_PUBLIC_API(char*)
-+    return js::EncodeLatin1(cx, str);
-+}
-+
-+JS_PUBLIC_API(JS::UniqueChars)
- JS_EncodeStringToUTF8(JSContext* cx, HandleString str)
- {
-     AssertHeapIsIdle();
-     CHECK_THREAD(cx);
- 
--    return StringToNewUTF8CharsZ(cx, *str).release();
-+    return StringToNewUTF8CharsZ(cx, *str);
- }
- 
- JS_PUBLIC_API(size_t)
- JS_GetStringEncodingLength(JSContext* cx, JSString* str)
- {
-     AssertHeapIsIdle();
-     CHECK_THREAD(cx);
- 
-diff --git a/js/src/jsexn.cpp b/js/src/jsexn.cpp
---- a/js/src/jsexn.cpp
-+++ b/js/src/jsexn.cpp
-@@ -18,17 +18,16 @@
- 
- #include "jsapi.h"
- #include "jsnum.h"
- #include "jstypes.h"
- #include "jsutil.h"
- 
- #include "gc/FreeOp.h"
- #include "gc/Marking.h"
--#include "js/AutoByteString.h"
- #include "js/CharacterEncoding.h"
- #include "js/UniquePtr.h"
- #include "js/Wrapper.h"
- #include "util/StringBuffer.h"
- #include "vm/ErrorObject.h"
- #include "vm/GlobalObject.h"
- #include "vm/JSContext.h"
- #include "vm/JSFunction.h"
-@@ -879,17 +878,17 @@ ErrorReport::init(JSContext* cx, HandleV
-             str = name;
-         } else if (msg) {
-             str = msg;
-         }
- 
-         if (JS_GetProperty(cx, exnObject, filename_str, &val)) {
-             RootedString tmp(cx, ToString<CanGC>(cx, val));
-             if (tmp)
--                filename.encodeUtf8(cx, tmp);
-+                filename = JS_EncodeStringToUTF8(cx, tmp);
-             else
-                 cx->clearPendingException();
-         } else {
-             cx->clearPendingException();
-         }
- 
-         uint32_t lineno;
-         if (!JS_GetProperty(cx, exnObject, js_lineNumber_str, &val) ||
-@@ -904,17 +903,17 @@ ErrorReport::init(JSContext* cx, HandleV
-             !ToUint32(cx, val, &column))
-         {
-             cx->clearPendingException();
-             column = 0;
-         }
- 
-         reportp = &ownedReport;
-         new (reportp) JSErrorReport();
--        ownedReport.filename = filename.ptr();
-+        ownedReport.filename = filename.get();
-         ownedReport.lineno = lineno;
-         ownedReport.exnType = JSEXN_INTERNALERR;
-         ownedReport.column = column;
-         if (str) {
-             // Note that using |str| for |message_| here is kind of wrong,
-             // because |str| is supposed to be of the format
-             // |ErrorName: ErrorMessage|, and |message_| is supposed to
-             // correspond to |ErrorMessage|. But this is what we've
-@@ -930,18 +929,20 @@ ErrorReport::init(JSContext* cx, HandleV
-             } else {
-                 cx->clearPendingException();
-                 str = nullptr;
-             }
-         }
-     }
- 
-     const char* utf8Message = nullptr;
--    if (str)
--        utf8Message = toStringResultBytesStorage.encodeUtf8(cx, str);
-+    if (str) {
-+        toStringResultBytesStorage = JS_EncodeStringToUTF8(cx, str);
-+        utf8Message = toStringResultBytesStorage.get();
-+    }
-     if (!utf8Message)
-         utf8Message = "unknown (can't convert to string)";
- 
-     if (!reportp) {
-         // This is basically an inlined version of
-         //
-         //   JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr,
-         //                            JSMSG_UNCAUGHT_EXCEPTION, utf8Message);
-@@ -1049,17 +1050,17 @@ JS::CreateError(JSContext* cx, JSExnType
-     if (!obj)
-         return false;
- 
-     rval.setObject(*obj);
-     return true;
- }
- 
- const char*
--js::ValueToSourceForError(JSContext* cx, HandleValue val, JSAutoByteString& bytes)
-+js::ValueToSourceForError(JSContext* cx, HandleValue val, UniqueChars& bytes)
- {
-     if (val.isUndefined())
-         return "undefined";
- 
-     if (val.isNull())
-         return "null";
- 
-     AutoClearPendingException acpe(cx);
-@@ -1088,24 +1089,26 @@ js::ValueToSourceForError(JSContext* cx,
-     } else if (val.isNumber()) {
-         if (!sb.append("the number "))
-             return "<<error converting value to string>>";
-     } else if (val.isString()) {
-         if (!sb.append("the string "))
-             return "<<error converting value to string>>";
-     } else {
-         MOZ_ASSERT(val.isBoolean() || val.isSymbol());
--        return bytes.encodeLatin1(cx, str);
-+        bytes = JS_EncodeString(cx, str);
-+        return bytes.get();
-     }
-     if (!sb.append(str))
-         return "<<error converting value to string>>";
-     str = sb.finishString();
-     if (!str)
-         return "<<error converting value to string>>";
--    return bytes.encodeLatin1(cx, str);
-+    bytes = JS_EncodeString(cx, str);
-+    return bytes.get();
- }
- 
- bool
- js::GetInternalError(JSContext* cx, unsigned errorNumber, MutableHandleValue error)
- {
-     FixedInvokeArgs<1> args(cx);
-     args[0].set(Int32Value(errorNumber));
-     return CallSelfHostedFunction(cx, cx->names().GetInternalError, NullHandleValue, args, error);
-diff --git a/js/src/jsexn.h b/js/src/jsexn.h
---- a/js/src/jsexn.h
-+++ b/js/src/jsexn.h
-@@ -12,18 +12,16 @@
- #define jsexn_h
- 
- #include "jsapi.h"
- #include "NamespaceImports.h"
- 
- #include "js/UniquePtr.h"
- #include "vm/JSContext.h"
- 
--class JSAutoByteString;
--
- namespace js {
- class ErrorObject;
- 
- UniquePtr<JSErrorNotes::Note>
- CopyErrorNote(JSContext* cx, JSErrorNotes::Note* note);
- 
- UniquePtr<JSErrorReport>
- CopyErrorReport(JSContext* cx, JSErrorReport* report);
-@@ -129,17 +127,17 @@ class AutoAssertNoPendingException
-     { }
- 
-     ~AutoAssertNoPendingException() {
-         MOZ_ASSERT(!JS_IsExceptionPending(cx));
-     }
- };
- 
- extern const char*
--ValueToSourceForError(JSContext* cx, HandleValue val, JSAutoByteString& bytes);
-+ValueToSourceForError(JSContext* cx, HandleValue val, JS::UniqueChars& bytes);
- 
- bool
- GetInternalError(JSContext* cx, unsigned errorNumber, MutableHandleValue error);
- bool
- GetTypeError(JSContext* cx, unsigned errorNumber, MutableHandleValue error);
- 
- } // namespace js
- 
-diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
---- a/js/src/jsfriendapi.cpp
-+++ b/js/src/jsfriendapi.cpp
-@@ -15,17 +15,17 @@
- #ifdef ENABLE_BIGINT
- #include "builtin/BigInt.h"
- #endif
- #include "builtin/Promise.h"
- #include "builtin/TestingFunctions.h"
- #include "gc/GCInternals.h"
- #include "gc/PublicIterators.h"
- #include "gc/WeakMap.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/Printf.h"
- #include "js/Proxy.h"
- #include "js/Wrapper.h"
- #include "proxy/DeadObjectProxy.h"
- #include "vm/ArgumentsObject.h"
- #include "vm/JSContext.h"
- #include "vm/JSObject.h"
- #include "vm/Realm.h"
-@@ -803,17 +803,17 @@ JS_FRIEND_API(bool)
- js::DumpScript(JSContext* cx, JSScript* scriptArg)
- {
-     return DumpScript(cx, scriptArg, stdout);
- }
- 
- #endif
- 
- static const char*
--FormatValue(JSContext* cx, const Value& vArg, JSAutoByteString& bytes)
-+FormatValue(JSContext* cx, const Value& vArg, UniqueChars& bytes)
- {
-     RootedValue v(cx, vArg);
- 
-     if (v.isMagic(JS_OPTIMIZED_OUT))
-         return "[unavailable]";
- 
-     /*
-      * We could use Maybe<AutoRealm> here, but G++ can't quite follow
-@@ -827,17 +827,18 @@ FormatValue(JSContext* cx, const Value& 
-         AutoRealm ar(cx, &v.toObject());
-         str = ToString<CanGC>(cx, v);
-     } else {
-         str = ToString<CanGC>(cx, v);
-     }
- 
-     if (!str)
-         return nullptr;
--    const char* buf = bytes.encodeLatin1(cx, str);
-+    bytes = JS_EncodeString(cx, str);
-+    const char* buf = bytes.get();
-     if (!buf)
-         return nullptr;
-     const char* found = strstr(buf, "function ");
-     if (found && (found - buf <= 2))
-         return "[function]";
-     return buf;
- }
- 
-@@ -887,18 +888,18 @@ FormatFrame(JSContext* cx, const FrameIt
-     {
-         if (!GetFunctionThis(cx, iter.abstractFramePtr(), &thisVal))
-             return nullptr;
-     }
- 
-     // print the frame number and function name
-     JS::UniqueChars buf(std::move(inBuf));
-     if (funname) {
--        JSAutoByteString funbytes;
--        char* str = funbytes.encodeLatin1(cx, funname);
-+        UniqueChars funbytes = JS_EncodeString(cx, funname);
-+        char* str = funbytes.get();
-         if (!str)
-             return nullptr;
-         buf = sprintf_append(cx, std::move(buf), "%d %s(", num, str);
-     } else if (fun) {
-         buf = sprintf_append(cx, std::move(buf), "%d anonymous(", num);
-     } else {
-         buf = sprintf_append(cx, std::move(buf), "%d <TOP LEVEL>", num);
-     }
-@@ -920,31 +921,32 @@ FormatFrame(JSContext* cx, const FrameIt
-                     arg = iter.argsObj().arg(i);
-                 } else {
-                     arg = iter.unaliasedActual(i, DONT_CHECK_ALIASING);
-                 }
-             } else {
-                 arg = MagicValue(JS_OPTIMIZED_OUT);
-             }
- 
--            JSAutoByteString valueBytes;
-+            UniqueChars valueBytes;
-             const char* value = FormatValue(cx, arg, valueBytes);
-             if (!value) {
-                 if (cx->isThrowingOutOfMemory())
-                     return nullptr;
-                 cx->clearPendingException();
-             }
- 
--            JSAutoByteString nameBytes;
-+            UniqueChars nameBytes;
-             const char* name = nullptr;
- 
-             if (i < iter.numFormalArgs()) {
-                 MOZ_ASSERT(fi.argumentSlot() == i);
-                 if (!fi.isDestructured()) {
--                    name = nameBytes.encodeLatin1(cx, fi.name());
-+                    nameBytes = JS_EncodeString(cx, fi.name());
-+                    name = nameBytes.get();
-                     if (!name)
-                         return nullptr;
-                 } else {
-                     name = "(destructured parameter)";
-                 }
-                 fi++;
-             }
- 
-@@ -980,25 +982,26 @@ FormatFrame(JSContext* cx, const FrameIt
- 
- 
-     // Note: Right now we don't dump the local variables anymore, because
-     // that is hard to support across all the JITs etc.
- 
-     // print the value of 'this'
-     if (showLocals) {
-         if (!thisVal.isUndefined()) {
--            JSAutoByteString thisValBytes;
-+            UniqueChars thisValBytes;
-             RootedString thisValStr(cx, ToString<CanGC>(cx, thisVal));
-             if (!thisValStr) {
-                 if (cx->isThrowingOutOfMemory())
-                     return nullptr;
-                 cx->clearPendingException();
-             }
-             if (thisValStr) {
--                const char* str = thisValBytes.encodeLatin1(cx, thisValStr);
-+                thisValBytes = JS_EncodeString(cx, thisValStr);
-+                const char* str = thisValBytes.get();
-                 if (!str)
-                     return nullptr;
-                 buf = sprintf_append(cx, std::move(buf), "    this = %s\n", str);
-             } else {
-                 buf = sprintf_append(cx, std::move(buf), "    <failed to get 'this' value>\n");
-             }
-             if (!buf)
-                 return nullptr;
-@@ -1027,25 +1030,25 @@ FormatFrame(JSContext* cx, const FrameIt
-                 cx->clearPendingException();
-                 buf = sprintf_append(cx, std::move(buf),
-                                      "    <Failed to fetch property while inspecting stack frame>\n");
-                 if (!buf)
-                     return nullptr;
-                 continue;
-             }
- 
--            JSAutoByteString nameBytes;
-+            UniqueChars nameBytes;
-             const char* name = FormatValue(cx, key, nameBytes);
-             if (!name) {
-                 if (cx->isThrowingOutOfMemory())
-                     return nullptr;
-                 cx->clearPendingException();
-             }
- 
--            JSAutoByteString valueBytes;
-+            UniqueChars valueBytes;
-             const char* value = FormatValue(cx, v, valueBytes);
-             if (!value) {
-                 if (cx->isThrowingOutOfMemory())
-                     return nullptr;
-                 cx->clearPendingException();
-             }
- 
-             if (name && value) {
-diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h
---- a/js/src/jsfriendapi.h
-+++ b/js/src/jsfriendapi.h
-@@ -10,17 +10,16 @@
- #include "mozilla/Atomics.h"
- #include "mozilla/Casting.h"
- #include "mozilla/Maybe.h"
- #include "mozilla/MemoryReporting.h"
- #include "mozilla/UniquePtr.h"
- 
- #include "jspubtd.h"
- 
--#include "js/AutoByteString.h"
- #include "js/CallArgs.h"
- #include "js/CallNonGenericMethod.h"
- #include "js/CharacterEncoding.h"
- #include "js/Class.h"
- #include "js/ErrorReport.h"
- #include "js/HeapAPI.h"
- #include "js/StableStringChars.h"
- #include "js/TypeDecls.h"
-@@ -1459,23 +1458,23 @@ struct MOZ_STACK_CLASS JS_FRIEND_API(Err
- 
-     // And keep its chars alive too.
-     JS::AutoStableStringChars strChars;
- 
-     // And we need to root our exception value.
-     JS::RootedObject exnObject;
- 
-     // And for our filename.
--    JSAutoByteString filename;
-+    JS::UniqueChars filename;
- 
-     // We may have a result of error.toString().
-     // FIXME: We should not call error.toString(), since it could have side
-     //        effect (see bug 633623).
-     JS::ConstUTF8CharsZ toStringResult_;
--    JSAutoByteString toStringResultBytesStorage;
-+    JS::UniqueChars toStringResultBytesStorage;
- };
- 
- /* Implemented in vm/StructuredClone.cpp. */
- extern JS_FRIEND_API(uint64_t)
- GetSCOffset(JSStructuredCloneWriter* writer);
- 
- namespace Scalar {
- 
-diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
---- a/js/src/jsnum.cpp
-+++ b/js/src/jsnum.cpp
-@@ -22,16 +22,17 @@
- #endif
- #include <math.h>
- #include <string.h>
- 
- #include "jstypes.h"
- 
- #include "builtin/String.h"
- #include "double-conversion/double-conversion.h"
-+#include "js/CharacterEncoding.h"
- #include "js/Conversions.h"
- #if !EXPOSE_INTL_API
- #include "js/LocaleSensitive.h"
- #endif
- #include "util/DoubleToString.h"
- #include "util/StringBuffer.h"
- #ifdef ENABLE_BIGINT
- #include "vm/BigIntType.h"
-@@ -791,20 +792,20 @@ num_toLocaleString_impl(JSContext* cx, c
-         JS_ReportOutOfMemory(cx);
-         return false;
-     }
- 
-     /*
-      * Create the string, move back to bytes to make string twiddling
-      * a bit easier and so we can insert platform charset seperators.
-      */
--    JSAutoByteString numBytes(cx, str);
-+    UniqueChars numBytes = JS_EncodeString(cx, str);
-     if (!numBytes)
-         return false;
--    const char* num = numBytes.ptr();
-+    const char* num = numBytes.get();
-     if (!num)
-         return false;
- 
-     /*
-      * Find the first non-integer value, whether it be a letter as in
-      * 'Infinity', a decimal point, or an 'e' from exponential notation.
-      */
-     const char* nint = num;
-diff --git a/js/src/moz.build b/js/src/moz.build
---- a/js/src/moz.build
-+++ b/js/src/moz.build
-@@ -119,17 +119,16 @@ EXPORTS += [
-     'jsfriendapi.h',
-     'jspubtd.h',
-     'jstypes.h',
-     'perf/jsperf.h',
- ]
- 
- EXPORTS.js += [
-     '../public/AllocPolicy.h',
--    '../public/AutoByteString.h',
-     '../public/CallArgs.h',
-     '../public/CallNonGenericMethod.h',
-     '../public/CharacterEncoding.h',
-     '../public/Class.h',
-     '../public/CompilationAndEvaluation.h',
-     '../public/CompileOptions.h',
-     '../public/Conversions.h',
-     '../public/Date.h',
-diff --git a/js/src/proxy/ScriptedProxyHandler.cpp b/js/src/proxy/ScriptedProxyHandler.cpp
---- a/js/src/proxy/ScriptedProxyHandler.cpp
-+++ b/js/src/proxy/ScriptedProxyHandler.cpp
-@@ -3,17 +3,17 @@
-  * This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "proxy/ScriptedProxyHandler.h"
- 
- #include "jsapi.h"
- 
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "vm/Interpreter.h" // For InstanceOfOperator
- 
- #include "vm/JSObject-inl.h"
- #include "vm/NativeObject-inl.h"
- 
- using namespace js;
- 
- using JS::IsArrayAnswer;
-@@ -174,21 +174,21 @@ GetProxyTrap(JSContext* cx, HandleObject
- 
-     if (func.isNull()) {
-         func.setUndefined();
-         return true;
-     }
- 
-     // Step 4.
-     if (!IsCallable(func)) {
--        JSAutoByteString bytes(cx, name);
-+        UniqueChars bytes = JS_EncodeString(cx, name);
-         if (!bytes)
-             return false;
- 
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_BAD_TRAP, bytes.ptr());
-+        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_BAD_TRAP, bytes.get());
-         return false;
-     }
- 
-     return true;
- }
- 
- // ES8 rev 0c1bd3004329336774cbc90de727cd0cf5f11e93 9.5.1 Proxy.[[GetPrototypeOf]].
- bool
-diff --git a/js/src/shell/OSObject.cpp b/js/src/shell/OSObject.cpp
---- a/js/src/shell/OSObject.cpp
-+++ b/js/src/shell/OSObject.cpp
-@@ -20,17 +20,17 @@
- #endif
- 
- #include "jsapi.h"
- // For JSFunctionSpecWithHelp
- #include "jsfriendapi.h"
- 
- #include "builtin/String.h"
- #include "gc/FreeOp.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/Conversions.h"
- #include "js/Wrapper.h"
- #include "shell/jsshell.h"
- #include "util/StringBuffer.h"
- #include "util/Text.h"
- #include "util/Windows.h"
- #include "vm/JSObject.h"
- #include "vm/TypedArrayObject.h"
-@@ -53,19 +53,19 @@ namespace shell {
- 
- #ifdef XP_WIN
- const char PathSeparator = '\\';
- #else
- const char PathSeparator = '/';
- #endif
- 
- static bool
--IsAbsolutePath(const JSAutoByteString& filename)
-+IsAbsolutePath(const UniqueChars& filename)
- {
--    const char* pathname = filename.ptr();
-+    const char* pathname = filename.get();
- 
-     if (pathname[0] == PathSeparator)
-         return true;
- 
- #ifdef XP_WIN
-     // On Windows there are various forms of absolute paths (see
-     // http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx
-     // for details):
-@@ -101,17 +101,17 @@ ResolvePath(JSContext* cx, HandleString 
-     if (!filenameStr) {
- #ifdef XP_WIN
-         return JS_NewStringCopyZ(cx, "nul");
- #else
-         return JS_NewStringCopyZ(cx, "/dev/null");
- #endif
-     }
- 
--    JSAutoByteString filename(cx, filenameStr);
-+    UniqueChars filename = JS_EncodeString(cx, filenameStr);
-     if (!filename)
-         return nullptr;
- 
-     if (IsAbsolutePath(filename))
-         return filenameStr;
- 
-     JS::AutoFilename scriptFilename;
-     if (resolveMode == ScriptRelative) {
-@@ -143,89 +143,89 @@ ResolvePath(JSContext* cx, HandleString 
-     } else {
-         const char* cwd = getcwd(buffer, PATH_MAX);
-         if (!cwd)
-             return nullptr;
-     }
- 
-     size_t len = strlen(buffer);
-     buffer[len] = '/';
--    strncpy(buffer + len + 1, filename.ptr(), sizeof(buffer) - (len+1));
-+    strncpy(buffer + len + 1, filename.get(), sizeof(buffer) - (len+1));
-     if (buffer[PATH_MAX] != '\0')
-         return nullptr;
- 
-     return JS_NewStringCopyZ(cx, buffer);
- }
- 
- JSObject*
- FileAsTypedArray(JSContext* cx, JS::HandleString pathnameStr)
- {
--    JSAutoByteString pathname(cx, pathnameStr);
-+    UniqueChars pathname = JS_EncodeString(cx, pathnameStr);
-     if (!pathname)
-         return nullptr;
- 
--    FILE* file = fopen(pathname.ptr(), "rb");
-+    FILE* file = fopen(pathname.get(), "rb");
-     if (!file) {
-         /*
-          * Use Latin1 variant here because the encoding of the return value of
-          * strerror function can be non-UTF-8.
-          */
--        JS_ReportErrorLatin1(cx, "can't open %s: %s", pathname.ptr(), strerror(errno));
-+        JS_ReportErrorLatin1(cx, "can't open %s: %s", pathname.get(), strerror(errno));
-         return nullptr;
-     }
-     AutoCloseFile autoClose(file);
- 
-     RootedObject obj(cx);
-     if (fseek(file, 0, SEEK_END) != 0) {
--        pathname.clear();
--        if (!pathname.encodeUtf8(cx, pathnameStr))
-+        pathname = JS_EncodeStringToUTF8(cx, pathnameStr);
-+        if (!pathname)
-             return nullptr;
--        JS_ReportErrorUTF8(cx, "can't seek end of %s", pathname.ptr());
-+        JS_ReportErrorUTF8(cx, "can't seek end of %s", pathname.get());
-     } else {
-         size_t len = ftell(file);
-         if (fseek(file, 0, SEEK_SET) != 0) {
--            pathname.clear();
--            if (!pathname.encodeUtf8(cx, pathnameStr))
-+            pathname = JS_EncodeStringToUTF8(cx, pathnameStr);
-+            if (!pathname)
-                 return nullptr;
--            JS_ReportErrorUTF8(cx, "can't seek start of %s", pathname.ptr());
-+            JS_ReportErrorUTF8(cx, "can't seek start of %s", pathname.get());
-         } else {
-             obj = JS_NewUint8Array(cx, len);
-             if (!obj)
-                 return nullptr;
-             js::TypedArrayObject& ta = obj->as<js::TypedArrayObject>();
-             if (ta.isSharedMemory()) {
-                 // Must opt in to use shared memory.  For now, don't.
-                 //
-                 // (It is incorrect to read into the buffer without
-                 // synchronization since that can create a race.  A
-                 // lock here won't fix it - both sides must
-                 // participate.  So what one must do is to create a
-                 // temporary buffer, read into that, and use a
-                 // race-safe primitive to copy memory into the
-                 // buffer.)
--                pathname.clear();
--                if (!pathname.encodeUtf8(cx, pathnameStr))
-+                pathname = JS_EncodeStringToUTF8(cx, pathnameStr);
-+                if (!pathname)
-                     return nullptr;
--                JS_ReportErrorUTF8(cx, "can't read %s: shared memory buffer", pathname.ptr());
-+                JS_ReportErrorUTF8(cx, "can't read %s: shared memory buffer", pathname.get());
-                 return nullptr;
-             }
-             char* buf = static_cast<char*>(ta.viewDataUnshared());
-             size_t cc = fread(buf, 1, len, file);
-             if (cc != len) {
-                 if (ptrdiff_t(cc) < 0) {
-                     /*
-                      * Use Latin1 variant here because the encoding of the return
-                      * value of strerror function can be non-UTF-8.
-                      */
--                    JS_ReportErrorLatin1(cx, "can't read %s: %s", pathname.ptr(), strerror(errno));
-+                    JS_ReportErrorLatin1(cx, "can't read %s: %s", pathname.get(), strerror(errno));
-                 } else {
--                    pathname.clear();
--                    if (!pathname.encodeUtf8(cx, pathnameStr))
-+                    pathname = JS_EncodeStringToUTF8(cx, pathnameStr);
-+                    if (!pathname)
-                         return nullptr;
--                    JS_ReportErrorUTF8(cx, "can't read %s: short read", pathname.ptr());
-+                    JS_ReportErrorUTF8(cx, "can't read %s: short read", pathname.get());
-                 }
-                 obj = nullptr;
-             }
-         }
-     }
-     return obj;
- }
- 
-@@ -314,51 +314,51 @@ osfile_writeTypedArrayToFile(JSContext* 
-         return false;
-     }
- 
-     RootedString givenPath(cx, args[0].toString());
-     RootedString str(cx, ResolvePath(cx, givenPath, RootRelative));
-     if (!str)
-         return false;
- 
--    JSAutoByteString filename(cx, str);
-+    UniqueChars filename = JS_EncodeString(cx, str);
-     if (!filename)
-         return false;
- 
--    FILE* file = fopen(filename.ptr(), "wb");
-+    FILE* file = fopen(filename.get(), "wb");
-     if (!file) {
-         /*
-          * Use Latin1 variant here because the encoding of the return value of
-          * strerror function can be non-UTF-8.
-          */
--        JS_ReportErrorLatin1(cx, "can't open %s: %s", filename.ptr(), strerror(errno));
-+        JS_ReportErrorLatin1(cx, "can't open %s: %s", filename.get(), strerror(errno));
-         return false;
-     }
-     AutoCloseFile autoClose(file);
- 
-     TypedArrayObject* obj = &args[1].toObject().as<TypedArrayObject>();
- 
-     if (obj->isSharedMemory()) {
-         // Must opt in to use shared memory.  For now, don't.
-         //
-         // See further comments in FileAsTypedArray, above.
--        filename.clear();
--        if (!filename.encodeUtf8(cx, str))
-+        filename = JS_EncodeStringToUTF8(cx, str);
-+        if (!filename)
-             return false;
--        JS_ReportErrorUTF8(cx, "can't write %s: shared memory buffer", filename.ptr());
-+        JS_ReportErrorUTF8(cx, "can't write %s: shared memory buffer", filename.get());
-         return false;
-     }
-     void* buf = obj->viewDataUnshared();
-     if (fwrite(buf, obj->bytesPerElement(), obj->length(), file) != obj->length() ||
-         !autoClose.release())
-     {
--        filename.clear();
--        if (!filename.encodeUtf8(cx, str))
-+        filename = JS_EncodeStringToUTF8(cx, str);
-+        if (!filename)
-             return false;
--        JS_ReportErrorUTF8(cx, "can't write %s", filename.ptr());
-+        JS_ReportErrorUTF8(cx, "can't write %s", filename.get());
-         return false;
-     }
- 
-     args.rval().setUndefined();
-     return true;
- }
- 
- /* static */ RCFile*
-@@ -467,26 +467,26 @@ const js::Class FileObject::class_ = {
- };
- 
- static FileObject*
- redirect(JSContext* cx, HandleString relFilename, RCFile** globalFile)
- {
-     RootedString filename(cx, ResolvePath(cx, relFilename, RootRelative));
-     if (!filename)
-         return nullptr;
--    JSAutoByteString filenameABS(cx, filename);
-+    UniqueChars filenameABS = JS_EncodeString(cx, filename);
-     if (!filenameABS)
-         return nullptr;
--    RCFile* file = RCFile::create(cx, filenameABS.ptr(), "wb");
-+    RCFile* file = RCFile::create(cx, filenameABS.get(), "wb");
-     if (!file) {
-         /*
-          * Use Latin1 variant here because the encoding of the return value of
-          * strerror function can be non-UTF-8.
-          */
--        JS_ReportErrorLatin1(cx, "cannot redirect to %s: %s", filenameABS.ptr(), strerror(errno));
-+        JS_ReportErrorLatin1(cx, "cannot redirect to %s: %s", filenameABS.get(), strerror(errno));
-         return nullptr;
-     }
- 
-     // Grant the global gOutFile ownership of the new file, release ownership
-     // of its old file, and return a FileObject owning the old file.
-     file->acquire(); // Global owner of new file
- 
-     FileObject* fileObj = FileObject::create(cx, *globalFile); // Newly created owner of old file
-@@ -631,17 +631,17 @@ ospath_isAbsolute(JSContext* cx, unsigne
-     CallArgs args = CallArgsFromVp(argc, vp);
- 
-     if (args.length() != 1 || !args[0].isString()) {
-         JS_ReportErrorNumberASCII(cx, my_GetErrorMessage, nullptr, JSSMSG_INVALID_ARGS,
-                                   "isAbsolute");
-         return false;
-     }
- 
--    JSAutoByteString path(cx, args[0].toString());
-+    UniqueChars path = JS_EncodeString(cx, args[0].toString());
-     if (!path)
-         return false;
- 
-     args.rval().setBoolean(IsAbsolutePath(path));
-     return true;
- }
- 
- static bool
-@@ -660,17 +660,17 @@ ospath_join(JSContext* cx, unsigned argc
-     StringBuffer buffer(cx);
- 
-     for (unsigned i = 0; i < args.length(); i++) {
-         if (!args[i].isString()) {
-             JS_ReportErrorASCII(cx, "join expects string arguments only");
-             return false;
-         }
- 
--        JSAutoByteString path(cx, args[i].toString());
-+        UniqueChars path = JS_EncodeString(cx, args[i].toString());
-         if (!path)
-             return false;
- 
-         if (IsAbsolutePath(path)) {
-             MOZ_ALWAYS_TRUE(buffer.resize(0));
-         } else if (i != 0) {
-             if (!buffer.append(PathSeparator))
-                 return false;
-@@ -706,21 +706,21 @@ os_getenv(JSContext* cx, unsigned argc, 
-     CallArgs args = CallArgsFromVp(argc, vp);
-     if (args.length() < 1) {
-         JS_ReportErrorASCII(cx, "os.getenv requires 1 argument");
-         return false;
-     }
-     RootedString key(cx, ToString(cx, args[0]));
-     if (!key)
-         return false;
--    JSAutoByteString keyBytes;
--    if (!keyBytes.encodeUtf8(cx, key))
-+    UniqueChars keyBytes = JS_EncodeStringToUTF8(cx, key);
-+    if (!keyBytes)
-         return false;
- 
--    if (const char* valueBytes = getenv(keyBytes.ptr())) {
-+    if (const char* valueBytes = getenv(keyBytes.get())) {
-         RootedString value(cx, JS_NewStringCopyZ(cx, valueBytes));
-         if (!value)
-             return false;
-         args.rval().setString(value);
-     } else {
-         args.rval().setUndefined();
-     }
-     return true;
-@@ -790,21 +790,21 @@ os_system(JSContext* cx, unsigned argc, 
-         JS_ReportErrorASCII(cx, "os.system requires 1 argument");
-         return false;
-     }
- 
-     JSString* str = JS::ToString(cx, args[0]);
-     if (!str)
-         return false;
- 
--    JSAutoByteString command(cx, str);
-+    UniqueChars command = JS_EncodeString(cx, str);
-     if (!command)
-         return false;
- 
--    int result = system(command.ptr());
-+    int result = system(command.get());
-     if (result == -1) {
-         ReportSysError(cx, "system call failed");
-         return false;
-     }
- 
-     args.rval().setInt32(result);
-     return true;
- }
-@@ -819,17 +819,17 @@ os_spawn(JSContext* cx, unsigned argc, V
-         JS_ReportErrorASCII(cx, "os.spawn requires 1 argument");
-         return false;
-     }
- 
-     JSString* str = JS::ToString(cx, args[0]);
-     if (!str)
-         return false;
- 
--    JSAutoByteString command(cx, str);
-+    UniqueChars command = JS_EncodeString(cx, str);
-     if (!command)
-         return false;
- 
-     int32_t childPid = fork();
-     if (childPid == -1) {
-         ReportSysError(cx, "fork failed");
-         return false;
-     }
-@@ -837,17 +837,17 @@ os_spawn(JSContext* cx, unsigned argc, V
-     if (childPid) {
-         args.rval().setInt32(childPid);
-         return true;
-     }
- 
-     // We are in the child
- 
-     const char* cmd[] = {"sh", "-c", nullptr, nullptr};
--    cmd[2] = command.ptr();
-+    cmd[2] = command.get();
- 
-     execvp("sh", (char * const*)cmd);
-     exit(1);
- }
- 
- static bool
- os_kill(JSContext* cx, unsigned argc, Value* vp)
- {
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -72,17 +72,17 @@
- #include "frontend/Parser.h"
- #include "gc/PublicIterators.h"
- #include "jit/arm/Simulator-arm.h"
- #include "jit/InlinableNatives.h"
- #include "jit/Ion.h"
- #include "jit/JitcodeMap.h"
- #include "jit/JitRealm.h"
- #include "jit/shared/CodeGenerator-shared.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/CompilationAndEvaluation.h"
- #include "js/CompileOptions.h"
- #include "js/Debug.h"
- #include "js/GCVector.h"
- #include "js/Initialization.h"
- #include "js/JSON.h"
- #include "js/Printf.h"
- #include "js/SourceBufferHolder.h"
-@@ -1048,46 +1048,51 @@ BoundToAsyncStack(JSContext* cx, unsigne
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
- 
-     RootedFunction function(cx, (&GetFunctionNativeReserved(&args.callee(), 0)
-                                  .toObject().as<JSFunction>()));
-     RootedObject options(cx, &GetFunctionNativeReserved(&args.callee(), 1).toObject());
- 
-     RootedSavedFrame stack(cx, nullptr);
--    JSAutoByteString cause;
-     bool isExplicit;
- 
-     RootedValue v(cx);
- 
-     if (!JS_GetProperty(cx, options, "stack", &v))
-         return false;
-     if (!v.isObject() || !v.toObject().is<SavedFrame>()) {
-         JS_ReportErrorASCII(cx, "The 'stack' property must be a SavedFrame object.");
-         return false;
-     }
-     stack = &v.toObject().as<SavedFrame>();
- 
-     if (!JS_GetProperty(cx, options, "cause", &v))
-         return false;
-     RootedString causeString(cx, ToString(cx, v));
--    if (!causeString || !cause.encodeUtf8(cx, causeString)) {
-+    if (!causeString) {
-+        MOZ_ASSERT(cx->isExceptionPending());
-+        return false;
-+    }
-+
-+    UniqueChars cause = JS_EncodeStringToUTF8(cx, causeString);
-+    if (!cause) {
-         MOZ_ASSERT(cx->isExceptionPending());
-         return false;
-     }
- 
-     if (!JS_GetProperty(cx, options, "explicit", &v))
-         return false;
-     isExplicit = v.isUndefined() ? true : ToBoolean(v);
- 
-     auto kind = (isExplicit
-                  ? JS::AutoSetAsyncStackForNewCalls::AsyncCallKind::EXPLICIT
-                  : JS::AutoSetAsyncStackForNewCalls::AsyncCallKind::IMPLICIT);
- 
--    JS::AutoSetAsyncStackForNewCalls asasfnckthxbye(cx, stack, cause.ptr(), kind);
-+    JS::AutoSetAsyncStackForNewCalls asasfnckthxbye(cx, stack, cause.get(), kind);
-     return Call(cx, UndefinedHandleValue, function,
-                 JS::HandleValueArray::empty(), args.rval());
- }
- 
- static bool
- BindToAsyncStack(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-@@ -1171,21 +1176,20 @@ EvalAndPrint(JSContext* cx, const char* 
- 
-     if (!result.isUndefined() && gOutFile->isOpen()) {
-         // Print.
-         RootedString str(cx);
-         str = JS_ValueToSource(cx, result);
-         if (!str)
-             return false;
- 
--        char* utf8chars = JS_EncodeStringToUTF8(cx, str);
-+        UniqueChars utf8chars = JS_EncodeStringToUTF8(cx, str);
-         if (!utf8chars)
-             return false;
--        fprintf(gOutFile->fp, "%s\n", utf8chars);
--        JS_free(cx, utf8chars);
-+        fprintf(gOutFile->fp, "%s\n", utf8chars.get());
-     }
-     return true;
- }
- 
- static MOZ_MUST_USE bool
- ReadEvalPrintLoop(JSContext* cx, FILE* in, bool compileOnly)
- {
-     ShellContext* sc = GetShellContext(cx);
-@@ -1355,17 +1359,17 @@ CreateMappedArrayBuffer(JSContext* cx, u
-         return false;
-     // It's a little bizarre to resolve relative to the script, but for testing
-     // I need a file at a known location, and the only good way I know of to do
-     // that right now is to include it in the repo alongside the test script.
-     // Bug 944164 would introduce an alternative.
-     JSString* filenameStr = ResolvePath(cx, rawFilenameStr, ScriptRelative);
-     if (!filenameStr)
-         return false;
--    JSAutoByteString filename(cx, filenameStr);
-+    UniqueChars filename = JS_EncodeString(cx, filenameStr);
-     if (!filename)
-         return false;
- 
-     uint32_t offset = 0;
-     if (args.length() >= 2) {
-         if (!JS::ToUint32(cx, args[1], &offset))
-             return false;
-     }
-@@ -1377,19 +1381,19 @@ CreateMappedArrayBuffer(JSContext* cx, u
-             return false;
-         sizeGiven = true;
-         if (size == 0) {
-             JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_BAD_ARRAY_LENGTH);
-             return false;
-         }
-     }
- 
--    FILE* file = fopen(filename.ptr(), "rb");
-+    FILE* file = fopen(filename.get(), "rb");
-     if (!file) {
--        ReportCantOpenErrorUnknownEncoding(cx, filename.ptr());
-+        ReportCantOpenErrorUnknownEncoding(cx, filename.get());
-         return false;
-     }
-     AutoCloseFile autoClose(file);
- 
-     if (!sizeGiven) {
-         struct stat st;
-         if (fstat(fileno(file), &st) < 0) {
-             JS_ReportErrorASCII(cx, "Unable to stat file");
-@@ -1465,41 +1469,41 @@ Options(JSContext* cx, unsigned argc, Va
- 
-     JS::ContextOptions oldContextOptions = JS::ContextOptionsRef(cx);
-     for (unsigned i = 0; i < args.length(); i++) {
-         RootedString str(cx, JS::ToString(cx, args[i]));
-         if (!str)
-             return false;
-         args[i].setString(str);
- 
--        JSAutoByteString opt;
--        if (!opt.encodeUtf8(cx, str))
--            return false;
--
--        if (strcmp(opt.ptr(), "strict") == 0) {
-+        UniqueChars opt = JS_EncodeStringToUTF8(cx, str);
-+        if (!opt)
-+            return false;
-+
-+        if (strcmp(opt.get(), "strict") == 0) {
-             JS::ContextOptionsRef(cx).toggleExtraWarnings();
--        } else if (strcmp(opt.ptr(), "werror") == 0) {
-+        } else if (strcmp(opt.get(), "werror") == 0) {
-             // Disallow toggling werror when there are off-thread jobs, to avoid
-             // confusing CompileError::throwError.
-             ShellContext* sc = GetShellContext(cx);
-             if (!sc->offThreadJobs.empty()) {
-                 JS_ReportErrorASCII(cx, "can't toggle werror when there are off-thread jobs");
-                 return false;
-             }
-             JS::ContextOptionsRef(cx).toggleWerror();
--        } else if (strcmp(opt.ptr(), "throw_on_asmjs_validation_failure") == 0) {
-+        } else if (strcmp(opt.get(), "throw_on_asmjs_validation_failure") == 0) {
-             JS::ContextOptionsRef(cx).toggleThrowOnAsmJSValidationFailure();
--        } else if (strcmp(opt.ptr(), "strict_mode") == 0) {
-+        } else if (strcmp(opt.get(), "strict_mode") == 0) {
-             JS::ContextOptionsRef(cx).toggleStrictMode();
-         } else {
-             JS_ReportErrorUTF8(cx,
-                                "unknown option name '%s'."
-                                " The valid names are strict,"
-                                " werror, and strict_mode.",
--                               opt.ptr());
-+                               opt.get());
-             return false;
-         }
-     }
- 
-     UniqueChars names = DuplicateString("");
-     bool found = false;
-     if (names && oldContextOptions.extraWarnings()) {
-         names = JS_sprintf_append(std::move(names), "%s%s", found ? "," : "", "strict");
-@@ -1542,29 +1546,29 @@ LoadScript(JSContext* cx, unsigned argc,
-                                       "load");
-             return false;
-         }
-         str = ResolvePath(cx, str, scriptRelative ? ScriptRelative : RootRelative);
-         if (!str) {
-             JS_ReportErrorASCII(cx, "unable to resolve path");
-             return false;
-         }
--        JSAutoByteString filename(cx, str);
-+        UniqueChars filename = JS_EncodeString(cx, str);
-         if (!filename)
-             return false;
-         errno = 0;
-         CompileOptions opts(cx);
-         opts.setIntroductionType("js shell load")
-             .setUTF8(true)
-             .setIsRunOnce(true)
-             .setNoScriptRval(true);
-         RootedScript script(cx);
-         RootedValue unused(cx);
--        if ((compileOnly && !Compile(cx, opts, filename.ptr(), &script)) ||
--            !Evaluate(cx, opts, filename.ptr(), &unused))
-+        if ((compileOnly && !Compile(cx, opts, filename.get(), &script)) ||
-+            !Evaluate(cx, opts, filename.get(), &unused))
-         {
-             return false;
-         }
-     }
- 
-     args.rval().setUndefined();
-     return true;
- }
-@@ -1581,17 +1585,17 @@ LoadScriptRelativeToScript(JSContext* cx
-     return LoadScript(cx, argc, vp, true);
- }
- 
- // Populate |options| with the options given by |opts|'s properties. If we
- // need to convert a filename to a C string, let fileNameBytes own the
- // bytes.
- static bool
- ParseCompileOptions(JSContext* cx, CompileOptions& options, HandleObject opts,
--                    JSAutoByteString& fileNameBytes)
-+                    UniqueChars& fileNameBytes)
- {
-     RootedValue v(cx);
-     RootedString s(cx);
- 
-     if (!JS_GetProperty(cx, opts, "isRunOnce", &v))
-         return false;
-     if (!v.isUndefined())
-         options.setIsRunOnce(ToBoolean(v));
-@@ -1604,17 +1608,18 @@ ParseCompileOptions(JSContext* cx, Compi
-     if (!JS_GetProperty(cx, opts, "fileName", &v))
-         return false;
-     if (v.isNull()) {
-         options.setFile(nullptr);
-     } else if (!v.isUndefined()) {
-         s = ToString(cx, v);
-         if (!s)
-             return false;
--        char* fileName = fileNameBytes.encodeLatin1(cx, s);
-+        fileNameBytes = JS_EncodeString(cx, s);
-+        char* fileName = fileNameBytes.get();
-         if (!fileName)
-             return false;
-         options.setFile(fileName);
-     }
- 
-     if (!JS_GetProperty(cx, opts, "element", &v))
-         return false;
-     if (v.isObject())
-@@ -1813,17 +1818,17 @@ Evaluate(JSContext* cx, unsigned argc, V
-     }
- 
-     if (!code || (args.length() == 2 && args[1].isPrimitive())) {
-         JS_ReportErrorNumberASCII(cx, my_GetErrorMessage, nullptr, JSSMSG_INVALID_ARGS, "evaluate");
-         return false;
-     }
- 
-     CompileOptions options(cx);
--    JSAutoByteString fileNameBytes;
-+    UniqueChars fileNameBytes;
-     RootedString displayURL(cx);
-     RootedString sourceMapURL(cx);
-     RootedObject global(cx, nullptr);
-     bool catchTermination = false;
-     bool loadBytecode = false;
-     bool saveBytecode = false;
-     bool saveIncrementalBytecode = false;
-     bool assertEqBytecode = false;
-@@ -2087,72 +2092,72 @@ Evaluate(JSContext* cx, unsigned argc, V
-     }
- 
-     return JS_WrapValue(cx, args.rval());
- }
- 
- JSString*
- js::shell::FileAsString(JSContext* cx, JS::HandleString pathnameStr)
- {
--    JSAutoByteString pathname(cx, pathnameStr);
-+    UniqueChars pathname = JS_EncodeString(cx, pathnameStr);
-     if (!pathname)
-         return nullptr;
- 
-     FILE* file;
- 
--    file = fopen(pathname.ptr(), "rb");
-+    file = fopen(pathname.get(), "rb");
-     if (!file) {
--        ReportCantOpenErrorUnknownEncoding(cx, pathname.ptr());
-+        ReportCantOpenErrorUnknownEncoding(cx, pathname.get());
-         return nullptr;
-     }
- 
-     AutoCloseFile autoClose(file);
- 
-     if (fseek(file, 0, SEEK_END) != 0) {
--        pathname.clear();
--        if (!pathname.encodeUtf8(cx, pathnameStr))
-+        pathname = JS_EncodeStringToUTF8(cx, pathnameStr);
-+        if (!pathname)
-             return nullptr;
--        JS_ReportErrorUTF8(cx, "can't seek end of %s", pathname.ptr());
-+        JS_ReportErrorUTF8(cx, "can't seek end of %s", pathname.get());
-         return nullptr;
-     }
- 
-     size_t len = ftell(file);
-     if (fseek(file, 0, SEEK_SET) != 0) {
--        pathname.clear();
--        if (!pathname.encodeUtf8(cx, pathnameStr))
-+        pathname = JS_EncodeStringToUTF8(cx, pathnameStr);
-+        if (!pathname)
-             return nullptr;
--        JS_ReportErrorUTF8(cx, "can't seek start of %s", pathname.ptr());
-+        JS_ReportErrorUTF8(cx, "can't seek start of %s", pathname.get());
-         return nullptr;
-     }
- 
-     UniqueChars buf(js_pod_malloc<char>(len + 1));
-     if (!buf)
-         return nullptr;
- 
-     size_t cc = fread(buf.get(), 1, len, file);
-     if (cc != len) {
-         if (ptrdiff_t(cc) < 0) {
--            ReportCantOpenErrorUnknownEncoding(cx, pathname.ptr());
-+            ReportCantOpenErrorUnknownEncoding(cx, pathname.get());
-         } else {
--            pathname.clear();
--            if (!pathname.encodeUtf8(cx, pathnameStr))
-+            pathname = JS_EncodeStringToUTF8(cx, pathnameStr);
-+            if (!pathname)
-                 return nullptr;
--            JS_ReportErrorUTF8(cx, "can't read %s: short read", pathname.ptr());
-+            JS_ReportErrorUTF8(cx, "can't read %s: short read", pathname.get());
-         }
-         return nullptr;
-     }
- 
-     UniqueTwoByteChars ucbuf(
-         JS::LossyUTF8CharsToNewTwoByteCharsZ(cx, JS::UTF8Chars(buf.get(), len), &len).get()
-     );
-     if (!ucbuf) {
--        pathname.clear();
--        if (!pathname.encodeUtf8(cx, pathnameStr))
-+        pathname = JS_EncodeStringToUTF8(cx, pathnameStr);
-+        if (!pathname)
-             return nullptr;
--        JS_ReportErrorUTF8(cx, "Invalid UTF-8 in file '%s'", pathname.ptr());
-+        JS_ReportErrorUTF8(cx, "Invalid UTF-8 in file '%s'", pathname.get());
-         return nullptr;
-     }
- 
-     return JS_NewUCStringCopyN(cx, ucbuf.get(), len);
- }
- 
- /*
-  * Function to run scripts and return compilation + execution time. Semantics
-@@ -2183,23 +2188,23 @@ Run(JSContext* cx, unsigned argc, Value*
- 
-     JS::SourceBufferHolder srcBuf(chars.twoByteRange().begin().get(), str->length(),
-                                   JS::SourceBufferHolder::NoOwnership);
- 
-     RootedScript script(cx);
-     int64_t startClock = PRMJ_Now();
-     {
-         /* FIXME: This should use UTF-8 (bug 987069). */
--        JSAutoByteString filename(cx, str);
-+        UniqueChars filename = JS_EncodeString(cx, str);
-         if (!filename)
-             return false;
- 
-         JS::CompileOptions options(cx);
-         options.setIntroductionType("js shell run")
--               .setFileAndLine(filename.ptr(), 1)
-+               .setFileAndLine(filename.get(), 1)
-                .setIsRunOnce(true)
-                .setNoScriptRval(true);
-         if (!JS_CompileUCScript(cx, srcBuf, options, &script))
-             return false;
-     }
- 
-     if (!JS_ExecuteScript(cx, script))
-         return false;
-@@ -2335,17 +2340,17 @@ ReadLineBuf(JSContext* cx, unsigned argc
- 
-     if (args.length() == 1) {
-         if (sc->readLineBuf)
-             sc->readLineBuf.reset();
- 
-         RootedString str(cx, JS::ToString(cx, args[0]));
-         if (!str)
-             return false;
--        sc->readLineBuf = UniqueChars(JS_EncodeStringToUTF8(cx, str));
-+        sc->readLineBuf = JS_EncodeStringToUTF8(cx, str);
-         if (!sc->readLineBuf)
-             return false;
- 
-         sc->readLineBufPos = 0;
-         return true;
-     }
- 
-     JS_ReportErrorASCII(cx, "Must specify at most one argument");
-@@ -2361,21 +2366,20 @@ PutStr(JSContext* cx, unsigned argc, Val
-         if (!gOutFile->isOpen()) {
-             JS_ReportErrorASCII(cx, "output file is closed");
-             return false;
-         }
- 
-         RootedString str(cx, JS::ToString(cx, args[0]));
-         if (!str)
-             return false;
--        char* bytes = JS_EncodeStringToUTF8(cx, str);
-+        UniqueChars bytes = JS_EncodeStringToUTF8(cx, str);
-         if (!bytes)
-             return false;
--        fputs(bytes, gOutFile->fp);
--        JS_free(cx, bytes);
-+        fputs(bytes.get(), gOutFile->fp);
-         fflush(gOutFile->fp);
-     }
- 
-     args.rval().setUndefined();
-     return true;
- }
- 
- static bool
-@@ -2394,21 +2398,20 @@ PrintInternal(JSContext* cx, const CallA
-         JS_ReportErrorASCII(cx, "output file is closed");
-         return false;
-     }
- 
-     for (unsigned i = 0; i < args.length(); i++) {
-         RootedString str(cx, JS::ToString(cx, args[i]));
-         if (!str)
-             return false;
--        char* bytes = JS_EncodeStringToUTF8(cx, str);
-+        UniqueChars bytes = JS_EncodeStringToUTF8(cx, str);
-         if (!bytes)
-             return false;
--        fprintf(file->fp, "%s%s", i ? " " : "", bytes);
--        JS_free(cx, bytes);
-+        fprintf(file->fp, "%s%s", i ? " " : "", bytes.get());
-     }
- 
-     fputc('\n', file->fp);
-     fflush(file->fp);
- 
-     args.rval().setUndefined();
-     return true;
- }
-@@ -2502,23 +2505,24 @@ StopTimingMutator(JSContext* cx, unsigne
-                 mutator_ms, mutator_ms / total_ms * 100.0, gc_ms, gc_ms / total_ms * 100.0);
-     }
- 
-     args.rval().setUndefined();
-     return true;
- }
- 
- static const char*
--ToSource(JSContext* cx, MutableHandleValue vp, JSAutoByteString* bytes)
-+ToSource(JSContext* cx, MutableHandleValue vp, UniqueChars* bytes)
- {
-     JSString* str = JS_ValueToSource(cx, vp);
-     if (str) {
-         vp.setString(str);
--        if (bytes->encodeLatin1(cx, str))
--            return bytes->ptr();
-+        *bytes = JS_EncodeString(cx, str);
-+        if (*bytes)
-+            return bytes->get();
-     }
-     JS_ClearPendingException(cx);
-     return "<<error converting value to string>>";
- }
- 
- static bool
- AssertEq(JSContext* cx, unsigned argc, Value* vp)
- {
-@@ -2533,29 +2537,29 @@ AssertEq(JSContext* cx, unsigned argc, V
-                                   "assertEq");
-         return false;
-     }
- 
-     bool same;
-     if (!JS_SameValue(cx, args[0], args[1], &same))
-         return false;
-     if (!same) {
--        JSAutoByteString bytes0, bytes1;
-+        UniqueChars bytes0, bytes1;
-         const char* actual = ToSource(cx, args[0], &bytes0);
-         const char* expected = ToSource(cx, args[1], &bytes1);
-         if (args.length() == 2) {
-             JS_ReportErrorNumberLatin1(cx, my_GetErrorMessage, nullptr, JSSMSG_ASSERT_EQ_FAILED,
-                                        actual, expected);
-         } else {
--            JSAutoByteString bytes2(cx, args[2].toString());
-+            UniqueChars bytes2 = JS_EncodeString(cx, args[2].toString());
-             if (!bytes2)
-                 return false;
-             JS_ReportErrorNumberLatin1(cx, my_GetErrorMessage, nullptr,
-                                        JSSMSG_ASSERT_EQ_FAILED_MSG,
--                                       actual, expected, bytes2.ptr());
-+                                       actual, expected, bytes2.get());
-         }
-         return false;
-     }
-     args.rval().setUndefined();
-     return true;
- }
- 
- static JSScript*
-@@ -3143,30 +3147,30 @@ DisassFile(JSContext* cx, unsigned argc,
-         args.rval().setUndefined();
-         return true;
-     }
- 
-     // We should change DisassembleOptionParser to store CallArgs.
-     JSString* str = JS::ToString(cx, HandleValue::fromMarkedLocation(&p.argv[0]));
-     if (!str)
-         return false;
--    JSAutoByteString filename(cx, str);
-+    UniqueChars filename = JS_EncodeString(cx, str);
-     if (!filename)
-         return false;
-     RootedScript script(cx);
- 
-     {
-         CompileOptions options(cx);
-         options.setIntroductionType("js shell disFile")
-                .setUTF8(true)
--               .setFileAndLine(filename.ptr(), 1)
-+               .setFileAndLine(filename.get(), 1)
-                .setIsRunOnce(true)
-                .setNoScriptRval(true);
- 
--        if (!JS::Compile(cx, options, filename.ptr(), &script))
-+        if (!JS::Compile(cx, options, filename.get(), &script))
-             return false;
-     }
- 
-     Sprinter sprinter(cx);
-     if (!sprinter.init())
-         return false;
-     bool ok = DisassembleScript(cx, script, nullptr, p.lines, p.recursive, p.sourceNotes, &sprinter);
-     if (ok)
-@@ -3363,31 +3367,31 @@ static bool
- Crash(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     if (args.length() == 0)
-         MOZ_CRASH("forced crash");
-     RootedString message(cx, JS::ToString(cx, args[0]));
-     if (!message)
-         return false;
--    char* utf8chars = JS_EncodeStringToUTF8(cx, message);
-+    UniqueChars utf8chars = JS_EncodeStringToUTF8(cx, message);
-     if (!utf8chars)
-         return false;
-     if (args.get(1).isObject()) {
-         RootedValue v(cx);
-         RootedObject opts(cx, &args[1].toObject());
-         if (!JS_GetProperty(cx, opts, "suppress_minidump", &v))
-             return false;
-         if (v.isBoolean() && v.toBoolean())
-             js::NoteIntentionalCrash();
-     }
- #ifndef DEBUG
--    MOZ_ReportCrash(utf8chars, __FILE__, __LINE__);
-+    MOZ_ReportCrash(utf8chars.get(), __FILE__, __LINE__);
- #endif
--    MOZ_CRASH_UNSAFE_OOL(utf8chars);
-+    MOZ_CRASH_UNSAFE_OOL(utf8chars.get());
- }
- 
- static bool
- GetSLX(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     RootedScript script(cx);
- 
-@@ -4368,17 +4372,17 @@ ParseModule(JSContext* cx, unsigned argc
-     if (args.length() > 1) {
-         if (!args[1].isString()) {
-             const char* typeName = InformalValueTypeName(args[1]);
-             JS_ReportErrorASCII(cx, "expected filename string, got %s", typeName);
-             return false;
-         }
- 
-         RootedString str(cx, args[1].toString());
--        filename.reset(JS_EncodeString(cx, str));
-+        filename = JS_EncodeString(cx, str);
-         if (!filename)
-             return false;
- 
-         options.setFileAndLine(filename.get(), 1);
-     } else {
-         options.setFileAndLine("<string>", 1);
-     }
- 
-@@ -4751,17 +4755,17 @@ BinParse(JSContext* cx, unsigned argc, V
-             stringFormat = optionFormat.toString();
-             JS::Rooted<JSLinearString*> linearFormat(cx);
-             linearFormat = stringFormat->ensureLinear(cx);
-             if (StringEqualsAscii(linearFormat, "multipart")) {
-                 useMultipart = true;
-             } else if (StringEqualsAscii(linearFormat, "simple")) {
-                 useMultipart = false;
-             } else {
--                JSAutoByteString printable;
-+                UniqueChars printable;
-                 JS_ReportErrorUTF8(cx,
-                                    "Unknown value for option `format`, expected 'multipart' or "
-                                    "'simple', got %s",
-                                    ValueToPrintableUTF8(cx, optionFormat, &printable));
-                 return false;
-             }
-         } else {
-             const char* typeName = InformalValueTypeName(optionFormat);
-@@ -4978,17 +4982,17 @@ OffThreadCompileScript(JSContext* cx, un
-         return false;
-     }
-     if (!args[0].isString()) {
-         const char* typeName = InformalValueTypeName(args[0]);
-         JS_ReportErrorASCII(cx, "expected string to parse, got %s", typeName);
-         return false;
-     }
- 
--    JSAutoByteString fileNameBytes;
-+    UniqueChars fileNameBytes;
-     CompileOptions options(cx);
-     options.setIntroductionType("js shell offThreadCompileScript")
-            .setFileAndLine("<string>", 1);
- 
-     if (args.length() >= 2) {
-         if (args[1].isPrimitive()) {
-             JS_ReportErrorNumberASCII(cx, my_GetErrorMessage, nullptr, JSSMSG_INVALID_ARGS,
-                                       "evaluate");
-@@ -5083,17 +5087,17 @@ OffThreadCompileModule(JSContext* cx, un
-     CallArgs args = CallArgsFromVp(argc, vp);
- 
-     if (args.length() != 1 || !args[0].isString()) {
-         JS_ReportErrorNumberASCII(cx, my_GetErrorMessage, nullptr, JSSMSG_INVALID_ARGS,
-                                   "offThreadCompileModule");
-         return false;
-     }
- 
--    JSAutoByteString fileNameBytes;
-+    UniqueChars fileNameBytes;
-     CompileOptions options(cx);
-     options.setIntroductionType("js shell offThreadCompileModule")
-            .setFileAndLine("<string>", 1);
-     options.setIsRunOnce(true)
-            .setSourceIsLazy(false);
-     options.forceAsync = true;
- 
-     JSString* scriptContents = args[0].toString();
-@@ -5187,17 +5191,17 @@ OffThreadDecodeScript(JSContext* cx, uns
-     }
-     if (!args[0].isObject() || !CacheEntry_isCacheEntry(&args[0].toObject())) {
-         const char* typeName = InformalValueTypeName(args[0]);
-         JS_ReportErrorASCII(cx, "expected cache entry, got %s", typeName);
-         return false;
-     }
-     RootedObject cacheEntry(cx, &args[0].toObject());
- 
--    JSAutoByteString fileNameBytes;
-+    UniqueChars fileNameBytes;
-     CompileOptions options(cx);
-     options.setIntroductionType("js shell offThreadDecodeScript")
-            .setFileAndLine("<string>", 1);
- 
-     if (args.length() >= 2) {
-         if (args[1].isPrimitive()) {
-             JS_ReportErrorNumberASCII(cx, my_GetErrorMessage, nullptr, JSSMSG_INVALID_ARGS,
-                                       "evaluate");
-@@ -5416,17 +5420,17 @@ NestedShell(JSContext* cx, unsigned argc
- 
-     // The arguments to nestedShell are stringified and append to argv.
-     RootedString str(cx);
-     for (unsigned i = 0; i < args.length(); i++) {
-         str = ToString(cx, args[i]);
-         if (!str)
-             return false;
- 
--        UniqueChars arg(JS_EncodeString(cx, str));
-+        UniqueChars arg = JS_EncodeString(cx, str);
-         if (!arg || !argv.append(std::move(arg)))
-             return false;
- 
-         // As a special case, if the caller passes "--js-cache", replace that
-         // with "--js-cache=$(jsCacheDir)"
-         if (!strcmp(argv.back(), "--js-cache") && jsCacheDir) {
-             UniqueChars newArg = JS_smprintf("--js-cache=%s", jsCacheDir);
-             if (!newArg) {
-@@ -6956,17 +6960,17 @@ class ShellAutoEntryMonitor : JS::dbg::A
- 
-     void Entry(JSContext* cx, JSFunction* function, JS::HandleValue asyncStack,
-                const char* asyncCause) override {
-         MOZ_ASSERT(!enteredWithoutExit);
-         enteredWithoutExit = true;
- 
-         RootedString displayId(cx, JS_GetFunctionDisplayId(function));
-         if (displayId) {
--            UniqueChars displayIdStr(JS_EncodeStringToUTF8(cx, displayId));
-+            UniqueChars displayIdStr = JS_EncodeStringToUTF8(cx, displayId);
-             if (!displayIdStr) {
-                 // We report OOM in buildResult.
-                 cx->recoverFromOutOfMemory();
-                 oom = true;
-                 return;
-             }
-             oom = !log.append(std::move(displayIdStr));
-             return;
-@@ -7154,21 +7158,21 @@ SetARMHwCapFlags(JSContext* cx, unsigned
-         return false;
-     }
- 
-     RootedString flagsListString(cx, JS::ToString(cx, args.get(0)));
-     if (!flagsListString)
-         return false;
- 
- #if defined(JS_CODEGEN_ARM)
--    JSAutoByteString flagsList(cx, flagsListString);
-+    UniqueChars flagsList = JS_EncodeString(cx, flagsListString);
-     if (!flagsList)
-         return false;
- 
--    jit::ParseARMHwCapFlags(flagsList.ptr());
-+    jit::ParseARMHwCapFlags(flagsList.get());
- #endif
- 
-     args.rval().setUndefined();
-     return true;
- }
- 
- #ifndef __AFL_HAVE_MANUAL_CONTROL
- # define __AFL_LOOP(x) true
-@@ -8192,17 +8196,17 @@ PrintStackTrace(JSContext* cx, HandleVal
-     if (!stackObj)
-         return true;
- 
-     JSPrincipals* principals = exnObj->as<ErrorObject>().realm()->principals();
-     RootedString stackStr(cx);
-     if (!BuildStackString(cx, principals, stackObj, &stackStr, 2))
-         return false;
- 
--    UniqueChars stack(JS_EncodeStringToUTF8(cx, stackStr));
-+    UniqueChars stack = JS_EncodeStringToUTF8(cx, stackStr);
-     if (!stack)
-         return false;
- 
-     FILE* fp = ErrorFilePointer();
-     fputs("Stack:\n", fp);
-     fputs(stack.get(), fp);
- 
-     return true;
-@@ -9051,17 +9055,17 @@ ProcessArgs(JSContext* cx, OptionParser*
-         RootedString jspath(cx, JS_NewStringCopyZ(cx, path));
-         if (!jspath)
-             return false;
- 
-         JSString* absolutePath = js::shell::ResolvePath(cx, jspath, RootRelative);
-         if (!absolutePath)
-             return false;
- 
--        sc->moduleLoadPath = UniqueChars(JS_EncodeString(cx, absolutePath));
-+        sc->moduleLoadPath = JS_EncodeString(cx, absolutePath);
-     } else {
-         sc->moduleLoadPath = js::shell::GetCWD();
-     }
- 
-     if (!sc->moduleLoadPath)
-         return false;
- 
-     if (!modulePaths.empty() && !InitModuleLoader(cx))
-diff --git a/js/src/vm/BytecodeUtil.cpp b/js/src/vm/BytecodeUtil.cpp
---- a/js/src/vm/BytecodeUtil.cpp
-+++ b/js/src/vm/BytecodeUtil.cpp
-@@ -27,17 +27,16 @@
- #include "jstypes.h"
- #include "jsutil.h"
- 
- #include "builtin/String.h"
- #include "frontend/BytecodeCompiler.h"
- #include "frontend/SourceNotes.h"
- #include "gc/FreeOp.h"
- #include "gc/GCInternals.h"
--#include "js/AutoByteString.h"
- #include "js/CharacterEncoding.h"
- #include "js/Printf.h"
- #include "util/StringBuffer.h"
- #include "util/Text.h"
- #include "vm/CodeCoverage.h"
- #include "vm/EnvironmentObject.h"
- #include "vm/JSAtom.h"
- #include "vm/JSContext.h"
-@@ -1127,81 +1126,83 @@ js::DumpScript(JSContext* cx, JSScript* 
-         return false;
-     RootedScript script(cx, scriptArg);
-     bool ok = Disassemble(cx, script, true, &sprinter);
-     fprintf(fp, "%s", sprinter.string());
-     return ok;
- }
- 
- static bool
--ToDisassemblySource(JSContext* cx, HandleValue v, JSAutoByteString* bytes)
-+ToDisassemblySource(JSContext* cx, HandleValue v, UniqueChars* bytes)
- {
-     if (v.isString()) {
-         Sprinter sprinter(cx);
-         if (!sprinter.init())
-             return false;
-         char* nbytes = QuoteString(&sprinter, v.toString(), '"');
-         if (!nbytes)
-             return false;
-         UniqueChars copy = JS_smprintf("%s", nbytes);
-         if (!copy) {
-             ReportOutOfMemory(cx);
-             return false;
-         }
--        bytes->initBytes(std::move(copy));
-+        *bytes = std::move(copy);
-         return true;
-     }
- 
-     if (JS::RuntimeHeapIsBusy()) {
-         UniqueChars source = JS_smprintf("<value>");
-         if (!source) {
-             ReportOutOfMemory(cx);
-             return false;
-         }
--        bytes->initBytes(std::move(source));
-+        *bytes = std::move(source);
-         return true;
-     }
- 
-     if (v.isObject()) {
-         JSObject& obj = v.toObject();
- 
-         if (obj.is<JSFunction>()) {
-             RootedFunction fun(cx, &obj.as<JSFunction>());
-             JSString* str = JS_DecompileFunction(cx, fun);
-             if (!str)
-                 return false;
--            return bytes->encodeLatin1(cx, str);
-+            *bytes = JS_EncodeString(cx, str);
-+            return !!*bytes;
-         }
- 
-         if (obj.is<RegExpObject>()) {
-             JSString* source = obj.as<RegExpObject>().toString(cx);
-             if (!source)
-                 return false;
--            return bytes->encodeLatin1(cx, source);
-+            *bytes = JS_EncodeString(cx, source);
-+            return !!*bytes;
-         }
-     }
- 
-     return !!ValueToPrintableLatin1(cx, v, bytes, true);
- }
- 
- static bool
--ToDisassemblySource(JSContext* cx, HandleScope scope, JSAutoByteString* bytes)
-+ToDisassemblySource(JSContext* cx, HandleScope scope, UniqueChars* bytes)
- {
-     UniqueChars source = JS_smprintf("%s {", ScopeKindString(scope->kind()));
-     if (!source) {
-         ReportOutOfMemory(cx);
-         return false;
-     }
- 
-     for (Rooted<BindingIter> bi(cx, BindingIter(scope)); bi; bi++) {
--        JSAutoByteString nameBytes;
-+        UniqueChars nameBytes;
-         if (!AtomToPrintableString(cx, bi.name(), &nameBytes))
-             return false;
- 
--        source = JS_sprintf_append(std::move(source), "%s: ", nameBytes.ptr());
-+        source = JS_sprintf_append(std::move(source), "%s: ", nameBytes.get());
-         if (!source) {
-             ReportOutOfMemory(cx);
-             return false;
-         }
- 
-         BindingLocation loc = bi.location();
-         switch (loc.kind()) {
-           case BindingLocation::Kind::Global:
-@@ -1244,17 +1245,17 @@ ToDisassemblySource(JSContext* cx, Handl
-     }
- 
-     source = JS_sprintf_append(std::move(source), "}");
-     if (!source) {
-         ReportOutOfMemory(cx);
-         return false;
-     }
- 
--    bytes->initBytes(std::move(source));
-+    *bytes = std::move(source);
-     return true;
- }
- 
- static bool
- DumpJumpOrigins(HandleScript script, jsbytecode* pc, const BytecodeParser* parser, Sprinter* sp)
- {
-     bool called = false;
-     auto callback = [&script, &sp, &called](jsbytecode* pc, BytecodeParser::JumpKind kind) {
-@@ -1416,83 +1417,83 @@ Disassemble1(JSContext* cx, HandleScript
-         ptrdiff_t off = GET_JUMP_OFFSET(pc);
-         if (!sp->jsprintf(" %u (%+d)", unsigned(loc + int(off)), int(off)))
-             return 0;
-         break;
-       }
- 
-       case JOF_SCOPE: {
-         RootedScope scope(cx, script->getScope(GET_UINT32_INDEX(pc)));
--        JSAutoByteString bytes;
-+        UniqueChars bytes;
-         if (!ToDisassemblySource(cx, scope, &bytes))
-             return 0;
--        if (!sp->jsprintf(" %s", bytes.ptr()))
-+        if (!sp->jsprintf(" %s", bytes.get()))
-             return 0;
-         break;
-       }
- 
-       case JOF_ENVCOORD: {
-         RootedValue v(cx,
-             StringValue(EnvironmentCoordinateName(cx->caches().envCoordinateNameCache, script, pc)));
--        JSAutoByteString bytes;
-+        UniqueChars bytes;
-         if (!ToDisassemblySource(cx, v, &bytes))
-             return 0;
-         EnvironmentCoordinate ec(pc);
--        if (!sp->jsprintf(" %s (hops = %u, slot = %u)", bytes.ptr(), ec.hops(), ec.slot()))
-+        if (!sp->jsprintf(" %s (hops = %u, slot = %u)", bytes.get(), ec.hops(), ec.slot()))
-             return 0;
-         break;
-       }
- 
-       case JOF_ATOM: {
-         RootedValue v(cx, StringValue(script->getAtom(GET_UINT32_INDEX(pc))));
--        JSAutoByteString bytes;
-+        UniqueChars bytes;
-         if (!ToDisassemblySource(cx, v, &bytes))
-             return 0;
--        if (!sp->jsprintf(" %s", bytes.ptr()))
-+        if (!sp->jsprintf(" %s", bytes.get()))
-             return 0;
-         break;
-       }
- 
-       case JOF_DOUBLE: {
-         RootedValue v(cx, script->getConst(GET_UINT32_INDEX(pc)));
--        JSAutoByteString bytes;
-+        UniqueChars bytes;
-         if (!ToDisassemblySource(cx, v, &bytes))
-             return 0;
--        if (!sp->jsprintf(" %s", bytes.ptr()))
-+        if (!sp->jsprintf(" %s", bytes.get()))
-             return 0;
-         break;
-       }
- 
-       case JOF_OBJECT: {
-         /* Don't call obj.toSource if analysis/inference is active. */
-         if (script->zone()->types.activeAnalysis) {
-             if (!sp->jsprintf(" object"))
-                 return 0;
-             break;
-         }
- 
-         JSObject* obj = script->getObject(GET_UINT32_INDEX(pc));
-         {
--            JSAutoByteString bytes;
-+            UniqueChars bytes;
-             RootedValue v(cx, ObjectValue(*obj));
-             if (!ToDisassemblySource(cx, v, &bytes))
-                 return 0;
--            if (!sp->jsprintf(" %s", bytes.ptr()))
-+            if (!sp->jsprintf(" %s", bytes.get()))
-                 return 0;
-         }
-         break;
-       }
- 
-       case JOF_REGEXP: {
-         js::RegExpObject* obj = script->getRegExp(pc);
--        JSAutoByteString bytes;
-+        UniqueChars bytes;
-         RootedValue v(cx, ObjectValue(*obj));
-         if (!ToDisassemblySource(cx, v, &bytes))
-             return 0;
--        if (!sp->jsprintf(" %s", bytes.ptr()))
-+        if (!sp->jsprintf(" %s", bytes.get()))
-             return 0;
-         break;
-       }
- 
-       case JOF_TABLESWITCH:
-       {
-         int32_t i, low, high;
- 
-@@ -2312,17 +2313,17 @@ js::DecompileValueGenerator(JSContext* c
-     if (!fallback) {
-         if (v.isUndefined())
-             return DuplicateString(cx, js_undefined_str); // Prevent users from seeing "(void 0)"
-         fallback = ValueToSource(cx, v);
-         if (!fallback)
-             return nullptr;
-     }
- 
--    return UniqueChars(JS_EncodeString(cx, fallback));
-+    return JS_EncodeString(cx, fallback);
- }
- 
- static bool
- DecompileArgumentFromStack(JSContext* cx, int formalIndex, UniqueChars* res)
- {
-     MOZ_ASSERT(formalIndex >= 0);
- 
-     *res = nullptr;
-@@ -2402,17 +2403,17 @@ js::DecompileArgument(JSContext* cx, int
-     }
-     if (v.isUndefined())
-         return DuplicateString(cx, js_undefined_str); // Prevent users from seeing "(void 0)"
- 
-     RootedString fallback(cx, ValueToSource(cx, v));
-     if (!fallback)
-         return nullptr;
- 
--    return UniqueChars(JS_EncodeString(cx, fallback));
-+    return JS_EncodeString(cx, fallback);
- }
- 
- extern bool
- js::IsValidBytecodeOffset(JSContext* cx, JSScript* script, size_t offset)
- {
-     // This could be faster (by following jump instructions if the target is <= offset).
-     for (BytecodeRange r(cx, script); !r.empty(); r.popFront()) {
-         size_t here = r.frontOffset();
-diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp
---- a/js/src/vm/Debugger.cpp
-+++ b/js/src/vm/Debugger.cpp
-@@ -20,17 +20,17 @@
- #include "frontend/Parser.h"
- #include "gc/FreeOp.h"
- #include "gc/HashUtil.h"
- #include "gc/Marking.h"
- #include "gc/Policy.h"
- #include "gc/PublicIterators.h"
- #include "jit/BaselineDebugModeOSR.h"
- #include "jit/BaselineJIT.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/Date.h"
- #include "js/SourceBufferHolder.h"
- #include "js/StableStringChars.h"
- #include "js/UbiNodeBreadthFirst.h"
- #include "js/Vector.h"
- #include "js/Wrapper.h"
- #include "proxy/ScriptedProxyHandler.h"
- #include "util/Text.h"
-@@ -481,20 +481,20 @@ ParseEvalOptions(JSContext* cx, HandleVa
- 
-     RootedValue v(cx);
-     if (!JS_GetProperty(cx, opts, "url", &v))
-         return false;
-     if (!v.isUndefined()) {
-         RootedString url_str(cx, ToString<CanGC>(cx, v));
-         if (!url_str)
-             return false;
--        JSAutoByteString url_bytes(cx, url_str);
-+        UniqueChars url_bytes = JS_EncodeString(cx, url_str);
-         if (!url_bytes)
-             return false;
--        if (!options.setFilename(cx, url_bytes.ptr()))
-+        if (!options.setFilename(cx, url_bytes.get()))
-             return false;
-     }
- 
-     if (!JS_GetProperty(cx, opts, "lineNumber", &v))
-         return false;
-     if (!v.isUndefined()) {
-         uint32_t lineno;
-         if (!ToUint32(cx, v, &lineno))
-@@ -4476,17 +4476,17 @@ class MOZ_STACK_CLASS Debugger::ScriptQu
- 
-     /* A script must be in one of these realms to match the query. */
-     RealmSet realms;
- 
-     /* If this is a string, matching scripts have urls equal to it. */
-     RootedValue url;
- 
-     /* url as a C string. */
--    JSAutoByteString urlCString;
-+    UniqueChars urlCString;
- 
-     /* If this is a string, matching scripts' sources have displayURLs equal to
-      * it. */
-     RootedLinearString displayURLString;
- 
-     /*
-      * If this is a source referent, matching scripts will have sources equal
-      * to this instance. Ideally we'd use a Maybe here, but Maybe interacts
-@@ -4562,17 +4562,18 @@ class MOZ_STACK_CLASS Debugger::ScriptQu
-     /*
-      * Given that parseQuery or omittedQuery has been called, prepare to match
-      * scripts. Set urlCString and displayURLChars as appropriate.
-      */
-     bool prepareQuery() {
-         // Compute urlCString and displayURLChars, if a url or displayURL was
-         // given respectively.
-         if (url.isString()) {
--            if (!urlCString.encodeLatin1(cx, url.toString()))
-+            urlCString = JS_EncodeString(cx, url.toString());
-+            if (!urlCString)
-                 return false;
-         }
- 
-         return true;
-     }
- 
-     bool delazifyScripts() {
-         // All scripts in debuggee realms must be visible, so delazify
-@@ -4603,24 +4604,24 @@ class MOZ_STACK_CLASS Debugger::ScriptQu
-         //
-         // * hasLine
-         //   Only JSScript supports GetScriptLineExtent.
-         return innermost || hasLine;
-     }
- 
-     template <typename T>
-     MOZ_MUST_USE bool commonFilter(T script, const JS::AutoRequireNoGC& nogc) {
--        if (urlCString.ptr()) {
-+        if (urlCString) {
-             bool gotFilename = false;
--            if (script->filename() && strcmp(script->filename(), urlCString.ptr()) == 0)
-+            if (script->filename() && strcmp(script->filename(), urlCString.get()) == 0)
-                 gotFilename = true;
- 
-             bool gotSourceURL = false;
-             if (!gotFilename && script->scriptSource()->introducerFilename() &&
--                strcmp(script->scriptSource()->introducerFilename(), urlCString.ptr()) == 0)
-+                strcmp(script->scriptSource()->introducerFilename(), urlCString.get()) == 0)
-             {
-                 gotSourceURL = true;
-             }
-             if (!gotFilename && !gotSourceURL)
-                 return false;
-         }
-         if (displayURLString) {
-             if (!script->scriptSource() || !script->scriptSource()->hasDisplayURL())
-@@ -4915,17 +4916,17 @@ class MOZ_STACK_CLASS Debugger::ObjectQu
- 
-         if (!referent.is<JSObject>() || referent.exposeToJS().isUndefined())
-             return true;
- 
-         JSObject* obj = referent.as<JSObject>();
- 
-         if (!className.isUndefined()) {
-             const char* objClassName = obj->getClass()->name;
--            if (strcmp(objClassName, classNameCString.ptr()) != 0)
-+            if (strcmp(objClassName, classNameCString.get()) != 0)
-                 return true;
-         }
- 
-         return objects.append(obj);
-     }
- 
-   private:
-     /* The context in which we should do our work. */
-@@ -4936,25 +4937,26 @@ class MOZ_STACK_CLASS Debugger::ObjectQu
- 
-     /*
-      * If this is non-null, matching objects will have a class whose name is
-      * this property.
-      */
-     RootedValue className;
- 
-     /* The className member, as a C string. */
--    JSAutoByteString classNameCString;
-+    UniqueChars classNameCString;
- 
-     /*
-      * Given that either omittedQuery or parseQuery has been called, prepare the
-      * query for matching objects.
-      */
-     bool prepareQuery() {
-         if (className.isString()) {
--            if (!classNameCString.encodeLatin1(cx, className.toString()))
-+            classNameCString = JS_EncodeString(cx, className.toString());
-+            if (!classNameCString)
-                 return false;
-         }
- 
-         return true;
-     }
- };
- 
- bool
-diff --git a/js/src/vm/EnvironmentObject.cpp b/js/src/vm/EnvironmentObject.cpp
---- a/js/src/vm/EnvironmentObject.cpp
-+++ b/js/src/vm/EnvironmentObject.cpp
-@@ -3,17 +3,16 @@
-  * This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "vm/EnvironmentObject-inl.h"
- 
- #include "builtin/ModuleObject.h"
- #include "gc/Policy.h"
--#include "js/AutoByteString.h"
- #include "vm/ArgumentsObject.h"
- #include "vm/AsyncFunction.h"
- #include "vm/GlobalObject.h"
- #include "vm/Iteration.h"
- #include "vm/ProxyObject.h"
- #include "vm/Realm.h"
- #include "vm/Shape.h"
- #include "vm/Xdr.h"
-@@ -1410,20 +1409,20 @@ LiveEnvironmentVal::staticAsserts()
- 
- /*****************************************************************************/
- 
- namespace {
- 
- static void
- ReportOptimizedOut(JSContext* cx, HandleId id)
- {
--    JSAutoByteString printable;
-+    UniqueChars printable;
-     if (ValueToPrintableLatin1(cx, IdToValue(id), &printable)) {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_DEBUG_OPTIMIZED_OUT,
--                                   printable.ptr());
-+                                   printable.get());
-     }
- }
- 
- /*
-  * DebugEnvironmentProxy is the handler for DebugEnvironmentProxy proxy
-  * objects. Having a custom handler (rather than trying to reuse js::Wrapper)
-  * gives us several important abilities:
-  *  - We want to pass the EnvironmentObject as the receiver to forwarded scope
-@@ -3354,21 +3353,21 @@ js::CheckVarNameConflict(JSContext* cx, 
-         return false;
-     }
-     return true;
- }
- 
- static void
- ReportCannotDeclareGlobalBinding(JSContext* cx, HandlePropertyName name, const char* reason)
- {
--    JSAutoByteString printable;
-+    UniqueChars printable;
-     if (AtomToPrintableString(cx, name, &printable)) {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                                    JSMSG_CANT_DECLARE_GLOBAL_BINDING,
--                                   printable.ptr(), reason);
-+                                   printable.get(), reason);
-     }
- }
- 
- bool
- js::CheckCanDeclareGlobalBinding(JSContext* cx, Handle<GlobalObject*> global,
-                                  HandlePropertyName name, bool isFunction)
- {
-     RootedId id(cx, NameToId(name));
-diff --git a/js/src/vm/ErrorObject.cpp b/js/src/vm/ErrorObject.cpp
---- a/js/src/vm/ErrorObject.cpp
-+++ b/js/src/vm/ErrorObject.cpp
-@@ -8,17 +8,16 @@
- #include "vm/ErrorObject-inl.h"
- 
- #include "mozilla/Range.h"
- 
- #include <utility>
- 
- #include "jsexn.h"
- 
--#include "js/AutoByteString.h"
- #include "js/CallArgs.h"
- #include "js/CharacterEncoding.h"
- #include "vm/GlobalObject.h"
- #include "vm/SelfHosting.h"
- #include "vm/StringType.h"
- 
- #include "vm/JSObject-inl.h"
- #include "vm/NativeObject-inl.h"
-@@ -141,20 +140,20 @@ js::ErrorObject::getOrCreateErrorReport(
-     // the nitty-gritty malloc stuff.
-     JSErrorReport report;
- 
-     // Type.
-     JSExnType type_ = type();
-     report.exnType = type_;
- 
-     // Filename.
--    JSAutoByteString filenameStr;
--    if (!filenameStr.encodeLatin1(cx, fileName(cx)))
-+    UniqueChars filenameStr = JS_EncodeString(cx, fileName(cx));
-+    if (!filenameStr)
-         return nullptr;
--    report.filename = filenameStr.ptr();
-+    report.filename = filenameStr.get();
- 
-     // Coordinates.
-     report.lineno = lineNumber();
-     report.column = columnNumber();
- 
-     // Message. Note that |new Error()| will result in an undefined |message|
-     // slot, so we need to explicitly substitute the empty string in that case.
-     RootedString message(cx, getMessage());
-diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
---- a/js/src/vm/Interpreter.cpp
-+++ b/js/src/vm/Interpreter.cpp
-@@ -26,17 +26,17 @@
- #include "builtin/ModuleObject.h"
- #include "builtin/Promise.h"
- #include "builtin/String.h"
- #include "jit/AtomicOperations.h"
- #include "jit/BaselineJIT.h"
- #include "jit/Ion.h"
- #include "jit/IonAnalysis.h"
- #include "jit/Jit.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "util/StringBuffer.h"
- #include "vm/AsyncFunction.h"
- #include "vm/AsyncIteration.h"
- #ifdef ENABLE_BIGINT
- #include "vm/BigIntType.h"
- #endif
- #include "vm/BytecodeUtil.h"
- #include "vm/Debugger.h"
-@@ -1856,17 +1856,17 @@ js::ReportInNotObjectError(JSContext* cx
-             if (!buf.appendSubstring(str, 0, MaxStringLength))
-                 return nullptr;
-             if (!buf.append("..."))
-                 return nullptr;
-             str = buf.finishString();
-             if (!str)
-                 return nullptr;
-         }
--        return UniqueChars(JS_EncodeString(cx, str));
-+        return JS_EncodeString(cx, str);
-     };
- 
-     if (lref.isString() && rref.isString()) {
-         UniqueChars lbytes = uniqueCharsFromString(cx, lref);
-         if (!lbytes)
-             return;
-         UniqueChars rbytes = uniqueCharsFromString(cx, rref);
-         if (!rbytes)
-@@ -5334,19 +5334,19 @@ js::NewArrayOperationWithTemplate(JSCont
-     return obj;
- }
- 
- void
- js::ReportRuntimeLexicalError(JSContext* cx, unsigned errorNumber, HandleId id)
- {
-     MOZ_ASSERT(errorNumber == JSMSG_UNINITIALIZED_LEXICAL ||
-                errorNumber == JSMSG_BAD_CONST_ASSIGN);
--    JSAutoByteString printable;
-+    UniqueChars printable;
-     if (ValueToPrintableLatin1(cx, IdToValue(id), &printable))
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber, printable.ptr());
-+        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber, printable.get());
- }
- 
- void
- js::ReportRuntimeLexicalError(JSContext* cx, unsigned errorNumber, HandlePropertyName name)
- {
-     RootedId id(cx, NameToId(name));
-     ReportRuntimeLexicalError(cx, errorNumber, id);
- }
-@@ -5377,20 +5377,20 @@ js::ReportRuntimeLexicalError(JSContext*
-     }
- 
-     ReportRuntimeLexicalError(cx, errorNumber, name);
- }
- 
- void
- js::ReportRuntimeRedeclaration(JSContext* cx, HandlePropertyName name, const char* redeclKind)
- {
--    JSAutoByteString printable;
-+    UniqueChars printable;
-     if (AtomToPrintableString(cx, name, &printable)) {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_REDECLARED_VAR,
--                                   redeclKind, printable.ptr());
-+                                   redeclKind, printable.get());
-     }
- }
- 
- bool
- js::ThrowCheckIsObject(JSContext* cx, CheckIsObjectKind kind)
- {
-     switch (kind) {
-       case CheckIsObjectKind::IteratorNext:
-@@ -5456,21 +5456,21 @@ js::ThrowUninitializedThis(JSContext* cx
-                 break;
-             }
-         }
-         MOZ_ASSERT(fun);
-     }
- 
-     if (fun->isDerivedClassConstructor()) {
-         const char* name = "anonymous";
--        JSAutoByteString str;
-+        UniqueChars str;
-         if (fun->explicitName()) {
-             if (!AtomToPrintableString(cx, fun->explicitName(), &str))
-                 return false;
--            name = str.ptr();
-+            name = str.get();
-         }
- 
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_UNINITIALIZED_THIS, name);
-         return false;
-     }
- 
-     MOZ_ASSERT(fun->isArrow());
-     JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_UNINITIALIZED_THIS_ARROW);
-diff --git a/js/src/vm/JSAtom.cpp b/js/src/vm/JSAtom.cpp
---- a/js/src/vm/JSAtom.cpp
-+++ b/js/src/vm/JSAtom.cpp
-@@ -16,17 +16,17 @@
- #include "mozilla/Unused.h"
- 
- #include <string.h>
- 
- #include "jstypes.h"
- 
- #include "builtin/String.h"
- #include "gc/Marking.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "util/Text.h"
- #include "vm/JSContext.h"
- #include "vm/SymbolType.h"
- #include "vm/Xdr.h"
- 
- #include "gc/AtomMarking-inl.h"
- #include "vm/JSContext-inl.h"
- #include "vm/JSObject-inl.h"
-@@ -112,23 +112,23 @@ js::AtomStateEntry::asPtr(JSContext* cx)
- {
-     JSAtom* atom = asPtrUnbarriered();
-     if (!cx->helperThread())
-         JSString::readBarrier(atom);
-     return atom;
- }
- 
- const char*
--js::AtomToPrintableString(JSContext* cx, JSAtom* atom, JSAutoByteString* bytes)
-+js::AtomToPrintableString(JSContext* cx, JSAtom* atom, UniqueChars* bytes)
- {
-     JSString* str = QuoteString(cx, atom, 0);
-     if (!str)
-         return nullptr;
--    bytes->initBytes(EncodeLatin1(cx, str));
--    return bytes->ptr();
-+    *bytes = EncodeLatin1(cx, str);
-+    return bytes->get();
- }
- 
- #define DEFINE_PROTO_STRING(name,init,clasp) const char js_##name##_str[] = #name;
- JS_FOR_EACH_PROTOTYPE(DEFINE_PROTO_STRING)
- #undef DEFINE_PROTO_STRING
- 
- #define CONST_CHAR_STR(idpart, id, text) const char js_##idpart##_str[] = text;
- FOR_EACH_COMMON_PROPERTYNAME(CONST_CHAR_STR)
-diff --git a/js/src/vm/JSAtom.h b/js/src/vm/JSAtom.h
---- a/js/src/vm/JSAtom.h
-+++ b/js/src/vm/JSAtom.h
-@@ -6,28 +6,27 @@
- 
- #ifndef vm_JSAtom_h
- #define vm_JSAtom_h
- 
- #include "mozilla/Maybe.h"
- 
- #include "gc/Rooting.h"
- #include "js/TypeDecls.h"
-+#include "js/Utility.h"
- #include "vm/CommonPropertyNames.h"
- 
--class JSAutoByteString;
--
- namespace js {
- 
- /*
-  * Return a printable, lossless char[] representation of a string-type atom.
-  * The lifetime of the result matches the lifetime of bytes.
-  */
- extern const char*
--AtomToPrintableString(JSContext* cx, JSAtom* atom, JSAutoByteString* bytes);
-+AtomToPrintableString(JSContext* cx, JSAtom* atom, UniqueChars* bytes);
- 
- class PropertyName;
- 
- }  /* namespace js */
- 
- /* Well-known predefined C strings. */
- #define DECLARE_PROTO_STR(name,init,clasp) extern const char js_##name##_str[];
- JS_FOR_EACH_PROTOTYPE(DECLARE_PROTO_STR)
-diff --git a/js/src/vm/JSContext.cpp b/js/src/vm/JSContext.cpp
---- a/js/src/vm/JSContext.cpp
-+++ b/js/src/vm/JSContext.cpp
-@@ -32,17 +32,16 @@
- #include "jspubtd.h"
- #include "jstypes.h"
- 
- #include "builtin/String.h"
- #include "gc/FreeOp.h"
- #include "gc/Marking.h"
- #include "jit/Ion.h"
- #include "jit/PcScriptCache.h"
--#include "js/AutoByteString.h"
- #include "js/CharacterEncoding.h"
- #include "js/Printf.h"
- #ifdef JS_SIMULATOR_ARM64
- # include "jit/arm64/vixl/Simulator-vixl.h"
- #endif
- #ifdef JS_SIMULATOR_ARM
- # include "jit/arm/Simulator-arm.h"
- #endif
-@@ -437,20 +436,20 @@ js::ReportUsageErrorASCII(JSContext* cx,
-     RootedValue usage(cx);
-     if (!JS_GetProperty(cx, callee, "usage", &usage))
-         return;
- 
-     if (!usage.isString()) {
-         JS_ReportErrorASCII(cx, "%s", msg);
-     } else {
-         RootedString usageStr(cx, usage.toString());
--        JSAutoByteString str;
--        if (!str.encodeUtf8(cx, usageStr))
-+        UniqueChars str = JS_EncodeStringToUTF8(cx, usageStr);
-+        if (!str)
-             return;
--        JS_ReportErrorUTF8(cx, "%s. Usage: %s", msg, str.ptr());
-+        JS_ReportErrorUTF8(cx, "%s. Usage: %s", msg, str.get());
-     }
- }
- 
- enum class PrintErrorKind {
-     Error,
-     Warning,
-     StrictWarning,
-     Note
-@@ -888,20 +887,20 @@ js::ReportErrorNumberUCArray(JSContext* 
-     ReportError(cx, &report, callback, userRef);
- 
-     return warning;
- }
- 
- void
- js::ReportIsNotDefined(JSContext* cx, HandleId id)
- {
--    JSAutoByteString printable;
-+    UniqueChars printable;
-     if (!ValueToPrintableUTF8(cx, IdToValue(id), &printable))
-         return;
--    JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_NOT_DEFINED, printable.ptr());
-+    JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_NOT_DEFINED, printable.get());
- }
- 
- void
- js::ReportIsNotDefined(JSContext* cx, HandlePropertyName name)
- {
-     RootedId id(cx, NameToId(name));
-     ReportIsNotDefined(cx, id);
- }
-@@ -929,58 +928,58 @@ js::ReportIsNullOrUndefinedForPropertyAc
-                                    bytes.get(), js_undefined_str);
-     } else {
-         MOZ_ASSERT(v.isNull());
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_UNEXPECTED_TYPE,
-                                    bytes.get(), js_null_str);
-     }
- }
- 
--char*
--EncodeIdAsLatin1(JSContext* cx, HandleId id, JSAutoByteString& bytes)
-+static UniqueChars
-+EncodeIdAsLatin1(JSContext* cx, HandleId id)
- {
-     RootedValue idVal(cx, IdToValue(id));
--    RootedString idStr(cx, ValueToSource(cx, idVal));
-+    JSString* idStr = ValueToSource(cx, idVal);
-     if (!idStr)
-         return nullptr;
- 
--    return bytes.encodeLatin1(cx, idStr);
-+    return EncodeLatin1(cx, idStr);
- }
- 
- void
- js::ReportIsNullOrUndefinedForPropertyAccess(JSContext* cx, HandleValue v, HandleId key,
-                                              bool reportScanStack)
- {
-     MOZ_ASSERT(v.isNullOrUndefined());
- 
--    JSAutoByteString keyBytes;
--    if (!EncodeIdAsLatin1(cx, key, keyBytes))
-+    UniqueChars keyBytes = EncodeIdAsLatin1(cx, key);
-+    if (!keyBytes)
-         return;
- 
-     if (!reportScanStack) {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL,
--                                   keyBytes.ptr(),
-+                                   keyBytes.get(),
-                                    v.isUndefined() ? js_undefined_str : js_null_str);
-         return;
-     }
- 
-     UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, v, nullptr);
-     if (!bytes)
-         return;
- 
-     if (strcmp(bytes.get(), js_undefined_str) == 0 || strcmp(bytes.get(), js_null_str) == 0) {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL,
--                                   keyBytes.ptr(), bytes.get());
-+                                   keyBytes.get(), bytes.get());
-     } else if (v.isUndefined()) {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL_EXPR,
--                                   bytes.get(), js_undefined_str, keyBytes.ptr());
-+                                   bytes.get(), js_undefined_str, keyBytes.get());
-     } else {
-         MOZ_ASSERT(v.isNull());
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_PROPERTY_FAIL_EXPR,
--                                   bytes.get(), js_null_str, keyBytes.ptr());
-+                                   bytes.get(), js_null_str, keyBytes.get());
-     }
- }
- 
- void
- js::ReportMissingArg(JSContext* cx, HandleValue v, unsigned arg)
- {
-     char argbuf[11];
-     UniqueChars bytes;
-diff --git a/js/src/vm/JSFunction-inl.h b/js/src/vm/JSFunction-inl.h
---- a/js/src/vm/JSFunction-inl.h
-+++ b/js/src/vm/JSFunction-inl.h
-@@ -6,29 +6,30 @@
- 
- #ifndef vm_JSFunction_inl_h
- #define vm_JSFunction_inl_h
- 
- #include "vm/JSFunction.h"
- 
- #include "gc/Allocator.h"
- #include "gc/GCTrace.h"
-+#include "js/CharacterEncoding.h"
- #include "vm/EnvironmentObject.h"
- 
- #include "vm/JSObject-inl.h"
- 
--class JSAutoByteString;
--
- namespace js {
- 
- inline const char*
--GetFunctionNameBytes(JSContext* cx, JSFunction* fun, JSAutoByteString* bytes)
-+GetFunctionNameBytes(JSContext* cx, JSFunction* fun, UniqueChars* bytes)
- {
--    if (JSAtom* name = fun->explicitName())
--        return bytes->encodeLatin1(cx, name);
-+    if (JSAtom* name = fun->explicitName()) {
-+        *bytes = JS_EncodeString(cx, name);
-+        return bytes->get();
-+    }
-     return js_anonymous_str;
- }
- 
- inline bool
- CanReuseFunctionForClone(JSContext* cx, HandleFunction fun)
- {
-     if (!fun->isSingleton())
-         return false;
-diff --git a/js/src/vm/JSFunction.cpp b/js/src/vm/JSFunction.cpp
---- a/js/src/vm/JSFunction.cpp
-+++ b/js/src/vm/JSFunction.cpp
-@@ -26,17 +26,16 @@
- #include "builtin/SelfHostingDefines.h"
- #include "builtin/String.h"
- #include "frontend/BytecodeCompiler.h"
- #include "frontend/TokenStream.h"
- #include "gc/Marking.h"
- #include "gc/Policy.h"
- #include "jit/InlinableNatives.h"
- #include "jit/Ion.h"
--#include "js/AutoByteString.h"
- #include "js/CallNonGenericMethod.h"
- #include "js/CompileOptions.h"
- #include "js/Proxy.h"
- 
- #include "js/SourceBufferHolder.h"
- #include "js/StableStringChars.h"
- #include "js/Wrapper.h"
- #include "util/StringBuffer.h"
-@@ -2494,29 +2493,29 @@ js::ReportIncompatibleMethod(JSContext* 
-     } else if (thisv.isSymbol()) {
-         MOZ_ASSERT(clasp != &SymbolObject::class_);
-     } else {
-         MOZ_ASSERT(thisv.isUndefined() || thisv.isNull());
-     }
- #endif
- 
-     if (JSFunction* fun = ReportIfNotFunction(cx, args.calleev())) {
--        JSAutoByteString funNameBytes;
-+        UniqueChars funNameBytes;
-         if (const char* funName = GetFunctionNameBytes(cx, fun, &funNameBytes)) {
-             JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_INCOMPATIBLE_PROTO,
-                                        clasp->name, funName, InformalValueTypeName(thisv));
-         }
-     }
- }
- 
- void
- js::ReportIncompatible(JSContext* cx, const CallArgs& args)
- {
-     if (JSFunction* fun = ReportIfNotFunction(cx, args.calleev())) {
--        JSAutoByteString funNameBytes;
-+        UniqueChars funNameBytes;
-         if (const char* funName = GetFunctionNameBytes(cx, fun, &funNameBytes)) {
-             JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_INCOMPATIBLE_METHOD,
-                                        funName, "method", InformalValueTypeName(args.thisv()));
-         }
-     }
- }
- 
- namespace JS {
-diff --git a/js/src/vm/JSObject.cpp b/js/src/vm/JSObject.cpp
---- a/js/src/vm/JSObject.cpp
-+++ b/js/src/vm/JSObject.cpp
-@@ -30,17 +30,17 @@
- #endif
- #include "builtin/Eval.h"
- #include "builtin/Object.h"
- #include "builtin/String.h"
- #include "builtin/Symbol.h"
- #include "frontend/BytecodeCompiler.h"
- #include "gc/Policy.h"
- #include "jit/BaselineJIT.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/MemoryMetrics.h"
- #include "js/Proxy.h"
- #include "js/UbiNode.h"
- #include "js/UniquePtr.h"
- #include "js/Wrapper.h"
- #include "util/Text.h"
- #include "util/Windows.h"
- #include "vm/ArgumentsObject.h"
-@@ -90,29 +90,29 @@ js::ReportNotObject(JSContext* cx, const
-                                    bytes.get());
- }
- 
- void
- js::ReportNotObjectArg(JSContext* cx, const char* nth, const char* fun, HandleValue v)
- {
-     MOZ_ASSERT(!v.isObject());
- 
--    JSAutoByteString bytes;
-+    UniqueChars bytes;
-     if (const char* chars = ValueToSourceForError(cx, v, bytes)) {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_NOT_NONNULL_OBJECT_ARG,
-                                    nth, fun, chars);
-     }
- }
- 
- void
- js::ReportNotObjectWithName(JSContext* cx, const char* name, HandleValue v)
- {
-     MOZ_ASSERT(!v.isObject());
- 
--    JSAutoByteString bytes;
-+    UniqueChars bytes;
-     if (const char* chars = ValueToSourceForError(cx, v, bytes)) {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_NOT_NONNULL_OBJECT_NAME,
-                                    name, chars);
-     }
- }
- 
- JS_PUBLIC_API(const char*)
- JS::InformalValueTypeName(const Value& v)
-@@ -256,25 +256,25 @@ bool
- js::Throw(JSContext* cx, jsid id, unsigned errorNumber, const char* details)
- {
-     MOZ_ASSERT(js_ErrorFormatString[errorNumber].argCount == (details ? 2 : 1));
- 
-     RootedValue idVal(cx, IdToValue(id));
-     JSString* idstr = ValueToSource(cx, idVal);
-     if (!idstr)
-        return false;
--    JSAutoByteString bytes(cx, idstr);
-+    UniqueChars bytes = JS_EncodeString(cx, idstr);
-     if (!bytes)
-         return false;
- 
-     if (details) {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber, bytes.ptr(),
-+        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber, bytes.get(),
-                                    details);
-     } else {
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber, bytes.ptr());
-+        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber, bytes.get());
-     }
- 
-     return false;
- }
- 
- 
- /*** PropertyDescriptor operations and DefineProperties ******************************************/
- 
-diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp
---- a/js/src/vm/NativeObject.cpp
-+++ b/js/src/vm/NativeObject.cpp
-@@ -7,17 +7,17 @@
- #include "vm/NativeObject-inl.h"
- 
- #include "mozilla/ArrayUtils.h"
- #include "mozilla/Casting.h"
- #include "mozilla/CheckedInt.h"
- #include "mozilla/DebugOnly.h"
- 
- #include "gc/Marking.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/Value.h"
- #include "vm/Debugger.h"
- #include "vm/TypedArrayObject.h"
- #include "vm/UnboxedObject.h"
- 
- #include "gc/Nursery-inl.h"
- #include "vm/ArrayObject-inl.h"
- #include "vm/EnvironmentObject-inl.h"
-@@ -2470,21 +2470,21 @@ MaybeReportUndeclaredVarAssignment(JSCon
-         if (IsStrictSetPC(pc))
-             flags = JSREPORT_ERROR;
-         else if (cx->realm()->behaviors().extraWarnings(cx))
-             flags = JSREPORT_WARNING | JSREPORT_STRICT;
-         else
-             return true;
-     }
- 
--    JSAutoByteString bytes;
--    if (!bytes.encodeUtf8(cx, propname))
-+    UniqueChars bytes = JS_EncodeStringToUTF8(cx, propname);
-+    if (!bytes)
-         return false;
-     return JS_ReportErrorFlagsAndNumberUTF8(cx, flags, GetErrorMessage, nullptr,
--                                            JSMSG_UNDECLARED_VAR, bytes.ptr());
-+                                            JSMSG_UNDECLARED_VAR, bytes.get());
- }
- 
- /*
-  * Finish assignment to a shapeful data property of a native object obj. This
-  * conforms to no standard and there is a lot of legacy baggage here.
-  */
- static bool
- NativeSetExistingDataProperty(JSContext* cx, HandleNativeObject obj, HandleShape shape,
-diff --git a/js/src/vm/Probes.cpp b/js/src/vm/Probes.cpp
---- a/js/src/vm/Probes.cpp
-+++ b/js/src/vm/Probes.cpp
-@@ -1,17 +1,17 @@
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-  * vim: set ts=8 sts=4 et sw=4 tw=99:
-  * This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "vm/Probes-inl.h"
- 
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "vm/JSContext.h"
- 
- #ifdef INCLUDE_MOZILLA_DTRACE
- #include "vm/JSScript-inl.h"
- #endif
- 
- #define TYPEOF(cx,v)    (v.isNull() ? JSTYPE_NULL : JS_TypeOfValue(cx,v))
- 
-@@ -29,40 +29,41 @@ ScriptFilename(const JSScript* script)
-     if (!script)
-         return probes::nullName;
-     if (!script->filename())
-         return probes::anonymousName;
-     return script->filename();
- }
- 
- static const char*
--FunctionName(JSContext* cx, JSFunction* fun, JSAutoByteString* bytes)
-+FunctionName(JSContext* cx, JSFunction* fun, UniqueChars* bytes)
- {
-     if (!fun)
-         return probes::nullName;
-     if (!fun->displayAtom())
-         return probes::anonymousName;
--    return bytes->encodeLatin1(cx, fun->displayAtom()) ? bytes->ptr() : probes::nullName;
-+    *bytes = JS_EncodeString(cx, fun->displayAtom());
-+    return *bytes ? bytes->get() : probes::nullName;
- }
- 
- /*
-  * These functions call the DTrace macros for the JavaScript USDT probes.
-  * Originally this code was inlined in the JavaScript code; however since
-  * a number of operations are called, these have been placed into functions
-  * to reduce any negative compiler optimization effect that the addition of
-  * a number of usually unused lines of code would cause.
-  */
- void
- probes::DTraceEnterJSFun(JSContext* cx, JSFunction* fun, JSScript* script)
- {
--    JSAutoByteString funNameBytes;
-+    UniqueChars funNameBytes;
-     JAVASCRIPT_FUNCTION_ENTRY(ScriptFilename(script), probes::nullName,
-                               FunctionName(cx, fun, &funNameBytes));
- }
- 
- void
- probes::DTraceExitJSFun(JSContext* cx, JSFunction* fun, JSScript* script)
- {
--    JSAutoByteString funNameBytes;
-+    UniqueChars funNameBytes;
-     JAVASCRIPT_FUNCTION_RETURN(ScriptFilename(script), probes::nullName,
-                                FunctionName(cx, fun, &funNameBytes));
- }
- #endif
-diff --git a/js/src/vm/SavedStacks.cpp b/js/src/vm/SavedStacks.cpp
---- a/js/src/vm/SavedStacks.cpp
-+++ b/js/src/vm/SavedStacks.cpp
-@@ -1815,25 +1815,24 @@ SavedStacks::MetadataBuilder::build(JSCo
-     return frame;
- }
- 
- const SavedStacks::MetadataBuilder SavedStacks::metadataBuilder;
- 
- /* static */ ReconstructedSavedFramePrincipals ReconstructedSavedFramePrincipals::IsSystem;
- /* static */ ReconstructedSavedFramePrincipals ReconstructedSavedFramePrincipals::IsNotSystem;
- 
--UTF8CharsZ
-+UniqueChars
- BuildUTF8StackString(JSContext* cx, JSPrincipals* principals, HandleObject stack)
- {
-     RootedString stackStr(cx);
-     if (!JS::BuildStackString(cx, principals, stack, &stackStr))
--        return UTF8CharsZ();
-+        return nullptr;
- 
--    char* chars = JS_EncodeStringToUTF8(cx, stackStr);
--    return UTF8CharsZ(chars, strlen(chars));
-+    return JS_EncodeStringToUTF8(cx, stackStr);
- }
- 
- uint32_t
- FixupColumnForDisplay(uint32_t column)
- {
-     // As described in WasmFrameIter::computeLine(), for wasm frames, the
-     // function index is returned as the column with the high bit set. In paths
-     // that format error stacks into strings, this information can be used to
-diff --git a/js/src/vm/SavedStacks.h b/js/src/vm/SavedStacks.h
---- a/js/src/vm/SavedStacks.h
-+++ b/js/src/vm/SavedStacks.h
-@@ -315,17 +315,17 @@ struct MutableWrappedPtrOperations<Saved
-     void setColumn(uint32_t v) { loc().column = v; }
- 
-   private:
-     SavedStacks::LocationValue& loc() {
-         return static_cast<Wrapper*>(this)->get();
-     }
- };
- 
--UTF8CharsZ
-+JS::UniqueChars
- BuildUTF8StackString(JSContext* cx, JSPrincipals* principals, HandleObject stack);
- 
- uint32_t
- FixupColumnForDisplay(uint32_t column);
- 
- } /* namespace js */
- 
- #endif /* vm_SavedStacks_h */
-diff --git a/js/src/vm/Scope.cpp b/js/src/vm/Scope.cpp
---- a/js/src/vm/Scope.cpp
-+++ b/js/src/vm/Scope.cpp
-@@ -9,17 +9,16 @@
- #include "mozilla/ScopeExit.h"
- 
- #include <memory>
- #include <new>
- 
- #include "builtin/ModuleObject.h"
- #include "gc/Allocator.h"
- #include "gc/FreeOp.h"
--#include "js/AutoByteString.h"
- #include "util/StringBuffer.h"
- #include "vm/EnvironmentObject.h"
- #include "vm/JSScript.h"
- #include "wasm/WasmInstance.h"
- 
- #include "gc/ObjectKind-inl.h"
- #include "vm/Shape-inl.h"
- 
-@@ -1515,20 +1514,20 @@ PositionalFormalParameterIter::Positiona
-     settle();
- }
- 
- void
- js::DumpBindings(JSContext* cx, Scope* scopeArg)
- {
-     RootedScope scope(cx, scopeArg);
-     for (Rooted<BindingIter> bi(cx, BindingIter(scope)); bi; bi++) {
--        JSAutoByteString bytes;
-+        UniqueChars bytes;
-         if (!AtomToPrintableString(cx, bi.name(), &bytes))
-             return;
--        fprintf(stderr, "%s %s ", BindingKindString(bi.kind()), bytes.ptr());
-+        fprintf(stderr, "%s %s ", BindingKindString(bi.kind()), bytes.get());
-         switch (bi.location().kind()) {
-           case BindingLocation::Kind::Global:
-             if (bi.isTopLevelFunction())
-                 fprintf(stderr, "global function\n");
-             else
-                 fprintf(stderr, "global\n");
-             break;
-           case BindingLocation::Kind::Argument:
-diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
---- a/js/src/vm/SelfHosting.cpp
-+++ b/js/src/vm/SelfHosting.cpp
-@@ -33,17 +33,16 @@
- #include "builtin/String.h"
- #include "builtin/TypedObject.h"
- #include "builtin/WeakMapObject.h"
- #include "gc/HashUtil.h"
- #include "gc/Marking.h"
- #include "gc/Policy.h"
- #include "jit/AtomicOperations.h"
- #include "jit/InlinableNatives.h"
--#include "js/AutoByteString.h"
- #include "js/CharacterEncoding.h"
- #include "js/CompilationAndEvaluation.h"
- #include "js/Date.h"
- #include "js/StableStringChars.h"
- #include "js/Wrapper.h"
- #include "util/StringBuffer.h"
- #include "vm/ArgumentsObject.h"
- #include "vm/Compression.h"
-@@ -288,38 +287,38 @@ ThrowErrorWithType(JSContext* cx, JSExnT
-     uint32_t errorNumber = args[0].toInt32();
- 
- #ifdef DEBUG
-     const JSErrorFormatString* efs = GetErrorMessage(nullptr, errorNumber);
-     MOZ_ASSERT(efs->argCount == args.length() - 1);
-     MOZ_ASSERT(efs->exnType == type, "error-throwing intrinsic and error number are inconsistent");
- #endif
- 
--    JSAutoByteString errorArgs[3];
-+    UniqueChars errorArgs[3];
-     for (unsigned i = 1; i < 4 && i < args.length(); i++) {
-         RootedValue val(cx, args[i]);
-         if (val.isInt32()) {
-             JSString* str = ToString<CanGC>(cx, val);
-             if (!str)
-                 return;
--            errorArgs[i - 1].encodeLatin1(cx, str);
-+            errorArgs[i - 1] = JS_EncodeString(cx, str);
-         } else if (val.isString()) {
--            errorArgs[i - 1].encodeLatin1(cx, val.toString());
-+            errorArgs[i - 1] = JS_EncodeString(cx, val.toString());
-         } else {
-             UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, val, nullptr);
-             if (!bytes)
-                 return;
--            errorArgs[i - 1].initBytes(std::move(bytes));
-+            errorArgs[i - 1] = std::move(bytes);
-         }
-         if (!errorArgs[i - 1])
-             return;
-     }
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber,
--                               errorArgs[0].ptr(), errorArgs[1].ptr(), errorArgs[2].ptr());
-+                               errorArgs[0].get(), errorArgs[1].get(), errorArgs[2].get());
- }
- 
- static bool
- intrinsic_ThrowRangeError(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() >= 1);
- 
-@@ -1864,17 +1863,17 @@ js::ReportIncompatibleSelfHostedMethod(J
-     // like array.sort(somethingSelfHosted), where we want to report the error
-     // in the somethingSelfHosted, not in the sort() call.
-     ScriptFrameIter iter(cx);
-     MOZ_ASSERT(iter.isFunctionFrame());
- 
-     while (!iter.done()) {
-         MOZ_ASSERT(iter.callee(cx)->isSelfHostedOrIntrinsic() &&
-                    !iter.callee(cx)->isBoundFunction());
--        JSAutoByteString funNameBytes;
-+        UniqueChars funNameBytes;
-         const char* funName = GetFunctionNameBytes(cx, iter.callee(cx), &funNameBytes);
-         if (!funName)
-             return false;
-         if (strcmp(funName, "IsTypedArrayEnsuringArrayBuffer") != 0) {
-             JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_INCOMPATIBLE_METHOD,
-                                        funName, "method", InformalValueTypeName(args.thisv()));
-             return false;
-         }
-diff --git a/js/src/vm/StringType.cpp b/js/src/vm/StringType.cpp
---- a/js/src/vm/StringType.cpp
-+++ b/js/src/vm/StringType.cpp
-@@ -15,17 +15,17 @@
- #include "mozilla/RangedPtr.h"
- #include "mozilla/TextUtils.h"
- #include "mozilla/TypeTraits.h"
- #include "mozilla/Unused.h"
- 
- #include "gc/GCInternals.h"
- #include "gc/Marking.h"
- #include "gc/Nursery.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/StableStringChars.h"
- #include "js/UbiNode.h"
- #include "util/StringBuffer.h"
- #include "vm/GeckoProfiler.h"
- 
- #include "vm/GeckoProfiler-inl.h"
- #include "vm/JSContext-inl.h"
- #include "vm/JSObject-inl.h"
-@@ -2058,45 +2058,47 @@ js::EncodeLatin1(JSContext* cx, JSString
-         return nullptr;
- 
-     mozilla::PodCopy(buf, linear->latin1Chars(nogc), len);
-     buf[len] = '\0';
-     return UniqueChars(reinterpret_cast<char*>(buf));
- }
- 
- const char*
--js::ValueToPrintableLatin1(JSContext* cx, const Value& vArg, JSAutoByteString* bytes,
-+js::ValueToPrintableLatin1(JSContext* cx, const Value& vArg, UniqueChars* bytes,
-                            bool asSource)
- {
-     RootedValue v(cx, vArg);
-     JSString* str;
-     if (asSource)
-         str = ValueToSource(cx, v);
-     else
-         str = ToString<CanGC>(cx, v);
-     if (!str)
-         return nullptr;
-     str = QuoteString(cx, str, 0);
-     if (!str)
-         return nullptr;
--    return bytes->encodeLatin1(cx, str);
-+    *bytes = JS_EncodeString(cx, str);
-+    return bytes->get();
- }
- 
- const char*
--js::ValueToPrintableUTF8(JSContext* cx, const Value& vArg, JSAutoByteString* bytes, bool asSource)
-+js::ValueToPrintableUTF8(JSContext* cx, const Value& vArg, UniqueChars* bytes, bool asSource)
- {
-     RootedValue v(cx, vArg);
-     JSString* str;
-     if (asSource)
-         str = ValueToSource(cx, v);
-     else
-         str = ToString<CanGC>(cx, v);
-     if (!str)
-         return nullptr;
--    return bytes->encodeUtf8(cx, RootedString(cx, str));
-+    *bytes = JS_EncodeStringToUTF8(cx, RootedString(cx, str));
-+    return bytes->get();
- }
- 
- template <AllowGC allowGC>
- JSString*
- js::ToStringSlow(JSContext* cx, typename MaybeRooted<Value, allowGC>::HandleType arg)
- {
-     /* As with ToObjectSlow, callers must verify that |arg| isn't a string. */
-     MOZ_ASSERT(!arg.isString());
-diff --git a/js/src/vm/StringType.h b/js/src/vm/StringType.h
---- a/js/src/vm/StringType.h
-+++ b/js/src/vm/StringType.h
-@@ -21,17 +21,16 @@
- #include "gc/Nursery.h"
- #include "gc/Rooting.h"
- #include "js/CharacterEncoding.h"
- #include "js/RootingAPI.h"
- #include "js/UniquePtr.h"
- #include "util/Text.h"
- #include "vm/Printer.h"
- 
--class JSAutoByteString;
- class JSDependentString;
- class JSExtensibleString;
- class JSExternalString;
- class JSInlineString;
- class JSRope;
- 
- namespace JS {
- 
-@@ -1682,24 +1681,24 @@ EncodeLatin1(JSContext* cx, JSString* st
-  * Convert a value to a printable C string.
-  *
-  * As the function name implies, any characters in a converted printable string will be Latin1
-  * characters. If there are any non-Latin1 characters in the original value, then those characters
-  * will be changed to Unicode escape sequences(I.e. \udddd, dddd are 4 hex digits) in the printable
-  * string.
-  */
- extern const char*
--ValueToPrintableLatin1(JSContext* cx, const Value&, JSAutoByteString* bytes,
-+ValueToPrintableLatin1(JSContext* cx, const Value&, UniqueChars* bytes,
-                        bool asSource = false);
- 
- /*
-  * Convert a value to a printable C string encoded in UTF-8.
-  */
- extern const char*
--ValueToPrintableUTF8(JSContext* cx, const Value&, JSAutoByteString* bytes, bool asSource = false);
-+ValueToPrintableUTF8(JSContext* cx, const Value&, UniqueChars* bytes, bool asSource = false);
- 
- /*
-  * Convert a non-string value to a string, returning null after reporting an
-  * error, otherwise returning a new string reference.
-  */
- template <AllowGC allowGC>
- extern JSString*
- ToStringSlow(JSContext* cx, typename MaybeRooted<Value, allowGC>::HandleType arg);
-diff --git a/js/src/vm/UbiNodeCensus.cpp b/js/src/vm/UbiNodeCensus.cpp
---- a/js/src/vm/UbiNodeCensus.cpp
-+++ b/js/src/vm/UbiNodeCensus.cpp
-@@ -1,17 +1,17 @@
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-  * vim: set ts=8 sts=4 et sw=4 tw=99:
-  * This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "js/UbiNodeCensus.h"
- 
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/StableStringChars.h"
- #include "util/Text.h"
- #include "vm/JSContext.h"
- #include "vm/Realm.h"
- 
- #include "vm/JSObject-inl.h"
- #include "vm/NativeObject-inl.h"
- 
-@@ -1260,22 +1260,22 @@ ParseBreakdown(JSContext* cx, HandleValu
-         return CountTypePtr(cx->new_<ByFilename>(std::move(thenType), std::move(noFilenameType)));
-     }
- 
-     // We didn't recognize the breakdown type; complain.
-     RootedString bySource(cx, ValueToSource(cx, byValue));
-     if (!bySource)
-         return nullptr;
- 
--    JSAutoByteString byBytes(cx, bySource);
-+    UniqueChars byBytes = JS_EncodeString(cx, bySource);
-     if (!byBytes)
-         return nullptr;
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_DEBUG_CENSUS_BREAKDOWN,
--                               byBytes.ptr());
-+                               byBytes.get());
-     return nullptr;
- }
- 
- // Get the default census breakdown:
- //
- // { by: "coarseType",
- //   objects: { by: "objectClass" },
- //   other:   { by: "internalType" },
-diff --git a/js/src/wasm/AsmJS.cpp b/js/src/wasm/AsmJS.cpp
---- a/js/src/wasm/AsmJS.cpp
-+++ b/js/src/wasm/AsmJS.cpp
-@@ -27,17 +27,16 @@
- #include <new>
- 
- #include "jsmath.h"
- #include "jsutil.h"
- 
- #include "builtin/String.h"
- #include "frontend/Parser.h"
- #include "gc/Policy.h"
--#include "js/AutoByteString.h"
- #include "js/MemoryMetrics.h"
- #include "js/Printf.h"
- #include "js/SourceBufferHolder.h"
- #include "js/StableStringChars.h"
- #include "js/Wrapper.h"
- #include "util/StringBuffer.h"
- #include "util/Text.h"
- #include "vm/ErrorReporting.h"
-@@ -2012,19 +2011,19 @@ class MOZ_STACK_CLASS JS_HAZ_ROOTED Modu
-         failfVAOffset(pn->pn_pos.begin, fmt, ap);
-         va_end(ap);
-         return false;
-     }
- 
-     bool failNameOffset(uint32_t offset, const char* fmt, PropertyName* name) {
-         // This function is invoked without the caller properly rooting its locals.
-         gc::AutoSuppressGC suppress(cx_);
--        JSAutoByteString bytes;
-+        UniqueChars bytes;
-         if (AtomToPrintableString(cx_, name, &bytes))
--            failfOffset(offset, fmt, bytes.ptr());
-+            failfOffset(offset, fmt, bytes.get());
-         return false;
-     }
- 
-     bool failName(ParseNode* pn, const char* fmt, PropertyName* name) {
-         return failNameOffset(pn->pn_pos.begin, fmt, name);
-     }
- 
-     bool failOverRecursed() {
-diff --git a/js/xpconnect/loader/mozJSComponentLoader.cpp b/js/xpconnect/loader/mozJSComponentLoader.cpp
---- a/js/xpconnect/loader/mozJSComponentLoader.cpp
-+++ b/js/xpconnect/loader/mozJSComponentLoader.cpp
-@@ -12,17 +12,17 @@
- #ifdef ANDROID
- #include <android/log.h>
- #endif
- #ifdef XP_WIN
- #include <windows.h>
- #endif
- 
- #include "jsapi.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/CompilationAndEvaluation.h"
- #include "js/Printf.h"
- #include "nsCOMPtr.h"
- #include "nsAutoPtr.h"
- #include "nsExceptionHandler.h"
- #include "nsIComponentManager.h"
- #include "mozilla/Module.h"
- #include "nsIFile.h"
-@@ -101,32 +101,32 @@ Dump(JSContext* cx, unsigned argc, Value
- 
-     if (args.length() == 0)
-         return true;
- 
-     RootedString str(cx, JS::ToString(cx, args[0]));
-     if (!str)
-         return false;
- 
--    JSAutoByteString utf8str;
--    if (!utf8str.encodeUtf8(cx, str))
-+    JS::UniqueChars utf8str = JS_EncodeStringToUTF8(cx, str);
-+    if (!utf8str)
-         return false;
- 
- #ifdef ANDROID
--    __android_log_print(ANDROID_LOG_INFO, "Gecko", "%s", utf8str.ptr());
-+    __android_log_print(ANDROID_LOG_INFO, "Gecko", "%s", utf8str.get());
- #endif
- #ifdef XP_WIN
-     if (IsDebuggerPresent()) {
-         nsAutoJSString wstr;
-         if (!wstr.init(cx, str))
-             return false;
-         OutputDebugStringW(wstr.get());
-     }
- #endif
--    fputs(utf8str.ptr(), stdout);
-+    fputs(utf8str.get(), stdout);
-     fflush(stdout);
-     return true;
- }
- 
- static bool
- Debug(JSContext* cx, unsigned argc, Value* vp)
- {
- #ifdef DEBUG
-@@ -1236,43 +1236,43 @@ mozJSComponentLoader::ExtractExports(JSC
-             !value.isString() ||
-             !JS_ValueToId(cx, value, &symbolId)) {
-             return ReportOnCallerUTF8(cxhelper, ERROR_ARRAY_ELEMENT, aInfo, i);
-         }
- 
-         symbolHolder = ResolveModuleObjectPropertyById(cx, aMod->obj, symbolId);
-         if (!symbolHolder ||
-             !JS_GetPropertyById(cx, symbolHolder, symbolId, &value)) {
--            JSAutoByteString bytes;
-             RootedString symbolStr(cx, JSID_TO_STRING(symbolId));
--            if (!bytes.encodeUtf8(cx, symbolStr))
-+            JS::UniqueChars bytes = JS_EncodeStringToUTF8(cx, symbolStr);
-+            if (!bytes)
-                 return NS_ERROR_FAILURE;
-             return ReportOnCallerUTF8(cxhelper, ERROR_GETTING_SYMBOL,
--                                      aInfo, bytes.ptr());
-+                                      aInfo, bytes.get());
-         }
- 
-         if (value.isUndefined()) {
-             missing = true;
-         }
- 
-         if (!JS_SetPropertyById(cx, aExports, symbolId, value)) {
--            JSAutoByteString bytes;
-             RootedString symbolStr(cx, JSID_TO_STRING(symbolId));
--            if (!bytes.encodeUtf8(cx, symbolStr))
-+            JS::UniqueChars bytes = JS_EncodeStringToUTF8(cx, symbolStr);
-+            if (!bytes)
-                 return NS_ERROR_FAILURE;
-             return ReportOnCallerUTF8(cxhelper, ERROR_GETTING_SYMBOL,
--                                      aInfo, bytes.ptr());
-+                                      aInfo, bytes.get());
-         }
- #ifdef DEBUG
-         if (i == 0) {
-             logBuffer.AssignLiteral("Installing symbols [ ");
-         }
--        JSAutoByteString bytes(cx, JSID_TO_STRING(symbolId));
-+        JS::UniqueChars bytes = JS_EncodeString(cx, JSID_TO_STRING(symbolId));
-         if (!!bytes)
--            logBuffer.Append(bytes.ptr());
-+            logBuffer.Append(bytes.get());
-         logBuffer.Append(' ');
-         if (i == symbolCount - 1) {
-             nsCString location;
-             MOZ_TRY(aInfo.GetLocation(location));
-             LOG(("%s] from %s\n", logBuffer.get(), location.get()));
-         }
- #endif
-     }
-diff --git a/js/xpconnect/src/Sandbox.cpp b/js/xpconnect/src/Sandbox.cpp
---- a/js/xpconnect/src/Sandbox.cpp
-+++ b/js/xpconnect/src/Sandbox.cpp
-@@ -5,17 +5,17 @@
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- /*
-  * The Components.Sandbox object.
-  */
- 
- #include "AccessCheck.h"
- #include "jsfriendapi.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/CompilationAndEvaluation.h"
- #include "js/Proxy.h"
- #include "js/SourceBufferHolder.h"
- #include "js/StructuredClone.h"
- #include "nsContentUtils.h"
- #include "nsGlobalWindow.h"
- #include "nsIException.h" // for nsIStackFrame
- #include "nsIScriptContext.h"
-@@ -135,18 +135,18 @@ SandboxDump(JSContext* cx, unsigned argc
- 
-     if (args.length() == 0)
-         return true;
- 
-     RootedString str(cx, ToString(cx, args[0]));
-     if (!str)
-         return false;
- 
--    JSAutoByteString utf8str;
--    char* cstr = utf8str.encodeUtf8(cx, str);
-+    JS::UniqueChars utf8str = JS_EncodeStringToUTF8(cx, str);
-+    char* cstr = utf8str.get();
-     if (!cstr)
-         return false;
- 
- #if defined(XP_MACOSX)
-     // Be nice and convert all \r to \n.
-     char* c = cstr;
-     char* cEnd = cstr + strlen(cstr);
-     while (c < cEnd) {
-@@ -850,79 +850,79 @@ xpc::GlobalProperties::Parse(JSContext* 
-         RootedValue nameValue(cx);
-         ok = JS_GetElement(cx, obj, i, &nameValue);
-         NS_ENSURE_TRUE(ok, false);
-         if (!nameValue.isString()) {
-             JS_ReportErrorASCII(cx, "Property names must be strings");
-             return false;
-         }
-         RootedString nameStr(cx, nameValue.toString());
--        JSAutoByteString name;
--        if (!name.encodeUtf8(cx, nameStr))
-+        JS::UniqueChars name = JS_EncodeStringToUTF8(cx, nameStr);
-+        if (!name)
-             return false;
--        if (!strcmp(name.ptr(), "Blob")) {
-+        if (!strcmp(name.get(), "Blob")) {
-             Blob = true;
--        } else if (!strcmp(name.ptr(), "ChromeUtils")) {
-+        } else if (!strcmp(name.get(), "ChromeUtils")) {
-             ChromeUtils = true;
--        } else if (!strcmp(name.ptr(), "CSS")) {
-+        } else if (!strcmp(name.get(), "CSS")) {
-             CSS = true;
--        } else if (!strcmp(name.ptr(), "CSSRule")) {
-+        } else if (!strcmp(name.get(), "CSSRule")) {
-             CSSRule = true;
--        } else if (!strcmp(name.ptr(), "Directory")) {
-+        } else if (!strcmp(name.get(), "Directory")) {
-             Directory = true;
--        } else if (!strcmp(name.ptr(), "DOMParser")) {
-+        } else if (!strcmp(name.get(), "DOMParser")) {
-             DOMParser = true;
--        } else if (!strcmp(name.ptr(), "Element")) {
-+        } else if (!strcmp(name.get(), "Element")) {
-             Element = true;
--        } else if (!strcmp(name.ptr(), "Event")) {
-+        } else if (!strcmp(name.get(), "Event")) {
-             Event = true;
--        } else if (!strcmp(name.ptr(), "File")) {
-+        } else if (!strcmp(name.get(), "File")) {
-             File = true;
--        } else if (!strcmp(name.ptr(), "FileReader")) {
-+        } else if (!strcmp(name.get(), "FileReader")) {
-             FileReader = true;
--        } else if (!strcmp(name.ptr(), "FormData")) {
-+        } else if (!strcmp(name.get(), "FormData")) {
-             FormData = true;
--        } else if (!strcmp(name.ptr(), "InspectorUtils")) {
-+        } else if (!strcmp(name.get(), "InspectorUtils")) {
-             InspectorUtils = true;
--        } else if (!strcmp(name.ptr(), "MessageChannel")) {
-+        } else if (!strcmp(name.get(), "MessageChannel")) {
-             MessageChannel = true;
--        } else if (!strcmp(name.ptr(), "Node")) {
-+        } else if (!strcmp(name.get(), "Node")) {
-             Node = true;
--        } else if (!strcmp(name.ptr(), "NodeFilter")) {
-+        } else if (!strcmp(name.get(), "NodeFilter")) {
-             NodeFilter = true;
--        } else if (!strcmp(name.ptr(), "TextDecoder")) {
-+        } else if (!strcmp(name.get(), "TextDecoder")) {
-             TextDecoder = true;
--        } else if (!strcmp(name.ptr(), "TextEncoder")) {
-+        } else if (!strcmp(name.get(), "TextEncoder")) {
-             TextEncoder = true;
--        } else if (!strcmp(name.ptr(), "URL")) {
-+        } else if (!strcmp(name.get(), "URL")) {
-             URL = true;
--        } else if (!strcmp(name.ptr(), "URLSearchParams")) {
-+        } else if (!strcmp(name.get(), "URLSearchParams")) {
-             URLSearchParams = true;
--        } else if (!strcmp(name.ptr(), "XMLHttpRequest")) {
-+        } else if (!strcmp(name.get(), "XMLHttpRequest")) {
-             XMLHttpRequest = true;
--        } else if (!strcmp(name.ptr(), "XMLSerializer")) {
-+        } else if (!strcmp(name.get(), "XMLSerializer")) {
-             XMLSerializer = true;
--        } else if (!strcmp(name.ptr(), "atob")) {
-+        } else if (!strcmp(name.get(), "atob")) {
-             atob = true;
--        } else if (!strcmp(name.ptr(), "btoa")) {
-+        } else if (!strcmp(name.get(), "btoa")) {
-             btoa = true;
--        } else if (!strcmp(name.ptr(), "caches")) {
-+        } else if (!strcmp(name.get(), "caches")) {
-             caches = true;
--        } else if (!strcmp(name.ptr(), "crypto")) {
-+        } else if (!strcmp(name.get(), "crypto")) {
-             crypto = true;
--        } else if (!strcmp(name.ptr(), "fetch")) {
-+        } else if (!strcmp(name.get(), "fetch")) {
-             fetch = true;
--        } else if (!strcmp(name.ptr(), "indexedDB")) {
-+        } else if (!strcmp(name.get(), "indexedDB")) {
-             indexedDB = true;
- #ifdef MOZ_WEBRTC
--        } else if (!strcmp(name.ptr(), "rtcIdentityProvider")) {
-+        } else if (!strcmp(name.get(), "rtcIdentityProvider")) {
-             rtcIdentityProvider = true;
- #endif
-         } else {
--            JS_ReportErrorUTF8(cx, "Unknown property name: %s", name.ptr());
-+            JS_ReportErrorUTF8(cx, "Unknown property name: %s", name.get());
-             return false;
-         }
-     }
-     return true;
- }
- 
- bool
- xpc::GlobalProperties::Define(JSContext* cx, JS::HandleObject obj)
-@@ -1535,20 +1535,19 @@ OptionsBase::ParseString(const char* nam
-     if (!found)
-         return true;
- 
-     if (!value.isString()) {
-         JS_ReportErrorASCII(mCx, "Expected a string value for property %s", name);
-         return false;
-     }
- 
--    char* tmp = JS_EncodeString(mCx, value.toString());
-+    JS::UniqueChars tmp = JS_EncodeString(mCx, value.toString());
-     NS_ENSURE_TRUE(tmp, false);
--    prop.Assign(tmp, strlen(tmp));
--    js_free(tmp);
-+    prop.Assign(tmp.get(), strlen(tmp.get()));
-     return true;
- }
- 
- /*
-  * Helper that tries to get a string property from the options object.
-  */
- bool
- OptionsBase::ParseString(const char* name, nsString& prop)
-diff --git a/js/xpconnect/src/XPCComponents.cpp b/js/xpconnect/src/XPCComponents.cpp
---- a/js/xpconnect/src/XPCComponents.cpp
-+++ b/js/xpconnect/src/XPCComponents.cpp
-@@ -10,17 +10,17 @@
- #include "xpc_make_class.h"
- #include "XPCJSWeakReference.h"
- #include "WrapperFactory.h"
- #include "nsJSUtils.h"
- #include "mozJSComponentLoader.h"
- #include "nsContentUtils.h"
- #include "nsCycleCollector.h"
- #include "jsfriendapi.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/SavedFrameAPI.h"
- #include "js/StructuredClone.h"
- #include "mozilla/Attributes.h"
- #include "mozilla/jsipc/CrossProcessObjectWrappers.h"
- #include "mozilla/Preferences.h"
- #include "nsJSEnvironment.h"
- #include "mozilla/TimeStamp.h"
- #include "mozilla/ResultExtensions.h"
-@@ -241,22 +241,22 @@ nsXPCComponents_Interfaces::Resolve(nsIX
-                                     bool* _retval)
- {
-     RootedObject obj(cx, objArg);
-     RootedId id(cx, idArg);
- 
-     if (!JSID_IS_STRING(id))
-         return NS_OK;
- 
--    JSAutoByteString name;
-     RootedString str(cx, JSID_TO_STRING(id));
-+    JS::UniqueChars name = JS_EncodeString(cx, str);
- 
-     // we only allow interfaces by name here
--    if (name.encodeLatin1(cx, str) && name.ptr()[0] != '{') {
--        const nsXPTInterfaceInfo* info = nsXPTInterfaceInfo::ByName(name.ptr());
-+    if (name && name[0] != '{') {
-+        const nsXPTInterfaceInfo* info = nsXPTInterfaceInfo::ByName(name.get());
-         if (!info)
-             return NS_OK;
- 
-         nsCOMPtr<nsIJSIID> nsid = nsJSIID::NewID(info);
- 
-         if (nsid) {
-             nsXPConnect* xpc = nsXPConnect::XPConnect();
-             RootedObject idobj(cx);
-@@ -426,20 +426,20 @@ nsXPCComponents_InterfacesByID::Resolve(
- 
-     if (!JSID_IS_STRING(id))
-         return NS_OK;
- 
-     RootedString str(cx, JSID_TO_STRING(id));
-     if (38 != JS_GetStringLength(str))
-         return NS_OK;
- 
--    JSAutoByteString utf8str;
--    if (utf8str.encodeUtf8(cx, str)) {
-+    JS::UniqueChars utf8str = JS_EncodeStringToUTF8(cx, str);
-+    if (utf8str) {
-         nsID iid;
--        if (!iid.Parse(utf8str.ptr()))
-+        if (!iid.Parse(utf8str.get()))
-             return NS_OK;
- 
-         const nsXPTInterfaceInfo* info = nsXPTInterfaceInfo::ByIID(iid);
-         if (!info)
-             return NS_OK;
- 
-         nsCOMPtr<nsIJSIID> nsid = nsJSIID::NewID(info);
- 
-@@ -618,21 +618,23 @@ nsXPCComponents_Classes::Resolve(nsIXPCo
-                                  JSContext* cx, JSObject* objArg,
-                                  jsid idArg, bool* resolvedp,
-                                  bool* _retval)
- 
- {
-     RootedId id(cx, idArg);
-     RootedObject obj(cx, objArg);
- 
--    JSAutoByteString name;
--    if (JSID_IS_STRING(id) &&
--        name.encodeLatin1(cx, JSID_TO_STRING(id)) &&
--        name.ptr()[0] != '{') { // we only allow contractids here
--        nsCOMPtr<nsIJSCID> nsid = nsJSCID::NewID(name.ptr());
-+    if (!JSID_IS_STRING(id))
-+        return NS_OK;
-+
-+    JS::UniqueChars name = JS_EncodeString(cx, JSID_TO_STRING(id));
-+    if (name &&
-+        name[0] != '{') { // we only allow contractids here
-+        nsCOMPtr<nsIJSCID> nsid = nsJSCID::NewID(name.get());
-         if (nsid) {
-             nsXPConnect* xpc = nsXPConnect::XPConnect();
-             RootedObject idobj(cx);
-             if (NS_SUCCEEDED(xpc->WrapNative(cx, obj,
-                                              static_cast<nsIJSCID*>(nsid),
-                                              NS_GET_IID(nsIJSCID),
-                                              idobj.address()))) {
-                 if (idobj) {
-@@ -827,22 +829,22 @@ nsXPCComponents_ClassesByID::Resolve(nsI
-                                      bool* _retval)
- {
-     RootedObject obj(cx, objArg);
-     RootedId id(cx, idArg);
- 
-     if (!JSID_IS_STRING(id))
-         return NS_OK;
- 
--    JSAutoByteString name;
-     RootedString str(cx, JSID_TO_STRING(id));
--    if (name.encodeLatin1(cx, str) && name.ptr()[0] == '{' &&
--        IsRegisteredCLSID(name.ptr())) // we only allow canonical CLSIDs here
-+    JS::UniqueChars name = JS_EncodeString(cx, str);
-+    if (name && name[0] == '{' &&
-+        IsRegisteredCLSID(name.get())) // we only allow canonical CLSIDs here
-     {
--        nsCOMPtr<nsIJSCID> nsid = nsJSCID::NewID(name.ptr());
-+        nsCOMPtr<nsIJSCID> nsid = nsJSCID::NewID(name.get());
-         if (nsid) {
-             nsXPConnect* xpc = nsXPConnect::XPConnect();
-             RootedObject idobj(cx);
-             if (NS_SUCCEEDED(xpc->WrapNative(cx, obj,
-                                              static_cast<nsIJSCID*>(nsid),
-                                              NS_GET_IID(nsIJSCID),
-                                              idobj.address()))) {
-                 if (idobj) {
-@@ -993,24 +995,26 @@ nsXPCComponents_Results::NewEnumerate(ns
- NS_IMETHODIMP
- nsXPCComponents_Results::Resolve(nsIXPConnectWrappedNative* wrapper,
-                                  JSContext* cx, JSObject* objArg,
-                                  jsid idArg, bool* resolvedp,
-                                  bool* _retval)
- {
-     RootedObject obj(cx, objArg);
-     RootedId id(cx, idArg);
--    JSAutoByteString name;
--
--    if (JSID_IS_STRING(id) && name.encodeLatin1(cx, JSID_TO_STRING(id))) {
-+    if (!JSID_IS_STRING(id))
-+        return NS_OK;
-+
-+    JS::UniqueChars name = JS_EncodeString(cx, JSID_TO_STRING(id));
-+    if (name) {
-         const char* rv_name;
-         const void* iter = nullptr;
-         nsresult rv;
-         while (nsXPCException::IterateNSResults(&rv, &rv_name, nullptr, &iter)) {
--            if (!strcmp(name.ptr(), rv_name)) {
-+            if (!strcmp(name.get(), rv_name)) {
-                 *resolvedp = true;
-                 if (!JS_DefinePropertyById(cx, obj, id, (uint32_t)rv,
-                                            JSPROP_ENUMERATE |
-                                            JSPROP_READONLY |
-                                            JSPROP_PERMANENT |
-                                            JSPROP_RESOLVING)) {
-                     return NS_ERROR_UNEXPECTED;
-                 }
-@@ -1156,25 +1160,27 @@ nsXPCComponents_ID::CallOrConstruct(nsIX
-     if (NS_FAILED(nsXPConnect::SecurityManager()->CanCreateInstance(cx, nsJSID::GetCID()))) {
-         // the security manager vetoed. It should have set an exception.
-         *_retval = false;
-         return NS_OK;
-     }
- 
-     // convert the first argument into a string and see if it looks like an id
- 
--    JSString* jsstr;
--    JSAutoByteString bytes;
-+    JSString* jsstr = ToString(cx, args[0]);
-+    if (!jsstr)
-+        return ThrowAndFail(NS_ERROR_XPC_BAD_ID_STRING, cx, _retval);
-+
-+    JS::UniqueChars bytes = JS_EncodeString(cx, jsstr);
-+    if (!bytes)
-+        return ThrowAndFail(NS_ERROR_XPC_BAD_ID_STRING, cx, _retval);
-+
-     nsID id;
--
--    if (!(jsstr = ToString(cx, args[0])) ||
--        !bytes.encodeLatin1(cx, jsstr) ||
--        !id.Parse(bytes.ptr())) {
-+    if (!id.Parse(bytes.get()))
-         return ThrowAndFail(NS_ERROR_XPC_BAD_ID_STRING, cx, _retval);
--    }
- 
-     // make the new object and return it.
- 
-     JSObject* newobj = xpc_NewIDObject(cx, obj, id);
-     if (!newobj)
-         return NS_ERROR_UNEXPECTED;
- 
-     args.rval().setObject(*newobj);
-@@ -1377,17 +1383,18 @@ struct MOZ_STACK_CLASS ExceptionArgParse
-     /*
-      * Parsing helpers.
-      */
- 
-     bool parseMessage(HandleValue v) {
-         JSString* str = ToString(cx, v);
-         if (!str)
-            return false;
--        eMsg = messageBytes.encodeLatin1(cx, str);
-+        messageBytes = JS_EncodeString(cx, str);
-+        eMsg = messageBytes.get();
-         return !!eMsg;
-     }
- 
-     bool parseResult(HandleValue v) {
-         return JS::ToUint32(cx, v, (uint32_t*) &eResult);
-     }
- 
-     bool parseStack(HandleValue v) {
-@@ -1448,17 +1455,17 @@ struct MOZ_STACK_CLASS ExceptionArgParse
-         return JS_GetProperty(cx, obj, name, rv);
-     }
- 
-     /*
-      * Internal data members.
-      */
- 
-     // If there's a non-default exception string, hold onto the allocated bytes.
--    JSAutoByteString messageBytes;
-+    JS::UniqueChars messageBytes;
- 
-     // Various bits and pieces that are helpful to have around.
-     JSContext* cx;
-     nsXPConnect* xpc;
- };
- 
- // static
- nsresult
-@@ -1866,22 +1873,27 @@ nsXPCComponents_Constructor::CallOrConst
-         *_retval = false;
-         return NS_OK;
-     }
- 
-     // initialization params for the Constructor object we will create
-     nsCOMPtr<nsIJSCID> cClassID;
-     nsCOMPtr<nsIJSIID> cInterfaceID;
-     const char*        cInitializer = nullptr;
--    JSAutoByteString  cInitializerBytes;
-+    JS::UniqueChars cInitializerBytes;
- 
-     if (args.length() >= 3) {
-         // args[2] is an initializer function or property name
-         RootedString str(cx, ToString(cx, args[2]));
--        if (!str || !(cInitializer = cInitializerBytes.encodeLatin1(cx, str)))
-+        if (!str)
-+            return ThrowAndFail(NS_ERROR_XPC_BAD_CONVERT_JS, cx, _retval);
-+
-+        cInitializerBytes = JS_EncodeString(cx, str);
-+        cInitializer = cInitializerBytes.get();
-+        if (!cInitializer)
-             return ThrowAndFail(NS_ERROR_XPC_BAD_CONVERT_JS, cx, _retval);
-     }
- 
-     if (args.length() >= 2) {
-         // args[1] is an iid name string
-         // XXXjband support passing "Components.interfaces.foo"?
- 
-         nsCOMPtr<nsIXPCComponents_Interfaces> ifaces;
-diff --git a/js/xpconnect/src/XPCConvert.cpp b/js/xpconnect/src/XPCConvert.cpp
---- a/js/xpconnect/src/XPCConvert.cpp
-+++ b/js/xpconnect/src/XPCConvert.cpp
-@@ -16,17 +16,16 @@
- #include "nsQueryObject.h"
- #include "nsScriptError.h"
- #include "WrapperFactory.h"
- 
- #include "nsWrapperCacheInlines.h"
- 
- #include "jsapi.h"
- #include "jsfriendapi.h"
--#include "js/AutoByteString.h"
- #include "js/CharacterEncoding.h"
- 
- #include "mozilla/dom/BindingUtils.h"
- #include "mozilla/dom/DOMException.h"
- #include "mozilla/dom/PrimitiveConversions.h"
- #include "mozilla/dom/Promise.h"
- #include "mozilla/jsipc/CrossProcessObjectWrappers.h"
- 
-@@ -1328,41 +1327,41 @@ XPCConvert::JSValToXPCException(MutableH
-                                       exceptn, nullptr, nullptr);
-         } else {
-             // It is a JSObject, but not a wrapped native...
- 
-             // If it is an engine Error with an error report then let's
-             // extract the report and build an xpcexception from that
-             const JSErrorReport* report;
-             if (nullptr != (report = JS_ErrorFromException(cx, obj))) {
--                JSAutoByteString toStringResult;
-+                JS::UniqueChars toStringResult;
-                 RootedString str(cx, ToString(cx, s));
-                 if (str)
--                    toStringResult.encodeUtf8(cx, str);
--                return JSErrorToXPCException(toStringResult.ptr(), ifaceName,
-+                    toStringResult = JS_EncodeStringToUTF8(cx, str);
-+                return JSErrorToXPCException(toStringResult.get(), ifaceName,
-                                              methodName, report, exceptn);
-             }
- 
-             // XXX we should do a check against 'js_ErrorClass' here and
-             // do the right thing - even though it has no JSErrorReport,
-             // The fact that it is a JSError exceptions means we can extract
-             // particular info and our 'result' should reflect that.
- 
-             // otherwise we'll just try to convert it to a string
- 
-             JSString* str = ToString(cx, s);
-             if (!str)
-                 return NS_ERROR_FAILURE;
- 
--            JSAutoByteString strBytes(cx, str);
-+            JS::UniqueChars strBytes = JS_EncodeString(cx, str);
-             if (!strBytes)
-                 return NS_ERROR_FAILURE;
- 
-             return ConstructException(NS_ERROR_XPC_JS_THREW_JS_OBJECT,
--                                      strBytes.ptr(), ifaceName, methodName,
-+                                      strBytes.get(), ifaceName, methodName,
-                                       nullptr, exceptn, cx, s.address());
-         }
-     }
- 
-     if (s.isUndefined() || s.isNull()) {
-         return ConstructException(NS_ERROR_XPC_JS_THREW_NULL,
-                                   nullptr, ifaceName, methodName, nullptr,
-                                   exceptn, cx, s.address());
-@@ -1415,20 +1414,20 @@ XPCConvert::JSValToXPCException(MutableH
-         }
-     }
- 
-     // otherwise we'll just try to convert it to a string
-     // Note: e.g., bools get converted to JSStrings by this code.
- 
-     JSString* str = ToString(cx, s);
-     if (str) {
--        JSAutoByteString strBytes(cx, str);
-+        JS::UniqueChars strBytes = JS_EncodeString(cx, str);
-         if (!!strBytes) {
-             return ConstructException(NS_ERROR_XPC_JS_THREW_STRING,
--                                      strBytes.ptr(), ifaceName, methodName,
-+                                      strBytes.get(), ifaceName, methodName,
-                                       nullptr, exceptn, cx, s.address());
-         }
-     }
-     return NS_ERROR_FAILURE;
- }
- 
- /***************************************************************************/
- 
-diff --git a/js/xpconnect/src/XPCShellImpl.cpp b/js/xpconnect/src/XPCShellImpl.cpp
---- a/js/xpconnect/src/XPCShellImpl.cpp
-+++ b/js/xpconnect/src/XPCShellImpl.cpp
-@@ -2,17 +2,17 @@
- /* vim: set ts=8 sts=4 et sw=4 tw=99: */
- /* This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "nsXULAppAPI.h"
- #include "jsapi.h"
- #include "jsfriendapi.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/CompilationAndEvaluation.h"
- #include "js/Printf.h"
- #include "mozilla/ChaosMode.h"
- #include "mozilla/dom/ScriptSettings.h"
- #include "mozilla/Preferences.h"
- #include "nsServiceManagerUtils.h"
- #include "nsComponentManagerUtils.h"
- #include "nsExceptionHandler.h"
-@@ -245,18 +245,18 @@ ReadLine(JSContext* cx, unsigned argc, V
-         str = JS::ToString(cx, args[0]);
-         if (!str)
-             return false;
-     } else {
-         str = JS_GetEmptyString(cx);
-     }
- 
-     /* Get a line from the infile */
--    JSAutoByteString strBytes(cx, str);
--    if (!strBytes || !GetLine(cx, buf, gInFile, strBytes.ptr()))
-+    JS::UniqueChars strBytes = JS_EncodeString(cx, str);
-+    if (!strBytes || !GetLine(cx, buf, gInFile, strBytes.get()))
-         return false;
- 
-     /* Strip newline character added by GetLine() */
-     unsigned int buflen = strlen(buf);
-     if (buflen == 0) {
-         if (feof(gInFile)) {
-             args.rval().setNull();
-             return true;
-@@ -283,23 +283,23 @@ Print(JSContext* cx, unsigned argc, Valu
-     RootedString str(cx);
-     nsAutoCString utf8output;
- 
-     for (unsigned i = 0; i < args.length(); i++) {
-         str = ToString(cx, args[i]);
-         if (!str)
-             return false;
- 
--        JSAutoByteString utf8str;
--        if (!utf8str.encodeUtf8(cx, str))
-+        JS::UniqueChars utf8str = JS_EncodeStringToUTF8(cx, str);
-+        if (!utf8str)
-             return false;
- 
-         if (i)
-             utf8output.Append(' ');
--        utf8output.Append(utf8str.ptr(), utf8str.length());
-+        utf8output.Append(utf8str.get(), strlen(utf8str.get()));
-     }
-     utf8output.Append('\n');
-     fputs(utf8output.get(), gOutFile);
-     fflush(gOutFile);
-     return true;
- }
- 
- static bool
-@@ -310,32 +310,32 @@ Dump(JSContext* cx, unsigned argc, Value
- 
-     if (!args.length())
-          return true;
- 
-     RootedString str(cx, ToString(cx, args[0]));
-     if (!str)
-         return false;
- 
--    JSAutoByteString utf8str;
--    if (!utf8str.encodeUtf8(cx, str))
-+    JS::UniqueChars utf8str = JS_EncodeStringToUTF8(cx, str);
-+    if (!utf8str)
-         return false;
- 
- #ifdef ANDROID
--    __android_log_print(ANDROID_LOG_INFO, "Gecko", "%s", utf8str.ptr());
-+    __android_log_print(ANDROID_LOG_INFO, "Gecko", "%s", utf8str.get());
- #endif
- #ifdef XP_WIN
-     if (IsDebuggerPresent()) {
-         nsAutoJSString wstr;
-         if (!wstr.init(cx, str))
-             return false;
-         OutputDebugStringW(wstr.get());
-     }
- #endif
--    fputs(utf8str.ptr(), gOutFile);
-+    fputs(utf8str.get(), gOutFile);
-     fflush(gOutFile);
-     return true;
- }
- 
- static bool
- Load(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-@@ -348,31 +348,31 @@ Load(JSContext* cx, unsigned argc, Value
-         return false;
-     }
- 
-     RootedString str(cx);
-     for (unsigned i = 0; i < args.length(); i++) {
-         str = ToString(cx, args[i]);
-         if (!str)
-             return false;
--        JSAutoByteString filename(cx, str);
-+        JS::UniqueChars filename = JS_EncodeString(cx, str);
-         if (!filename)
-             return false;
--        FILE* file = fopen(filename.ptr(), "r");
-+        FILE* file = fopen(filename.get(), "r");
-         if (!file) {
--            filename.clear();
--            if (!filename.encodeUtf8(cx, str))
-+            filename = JS_EncodeStringToUTF8(cx, str);
-+            if (!filename)
-                 return false;
-             JS_ReportErrorUTF8(cx, "cannot open file '%s' for reading",
--                               filename.ptr());
-+                               filename.get());
-             return false;
-         }
-         JS::CompileOptions options(cx);
-         options.setUTF8(true)
--               .setFileAndLine(filename.ptr(), 1)
-+               .setFileAndLine(filename.get(), 1)
-                .setIsRunOnce(true);
-         JS::Rooted<JSScript*> script(cx);
-         JS::Rooted<JSObject*> global(cx, JS::CurrentGlobalOrNull(cx));
-         JS::Compile(cx, options, file, &script);
-         fclose(file);
-         if (!script)
-             return false;
- 
-@@ -474,35 +474,35 @@ SendCommand(JSContext* cx, unsigned argc
- 
- static bool
- Options(JSContext* cx, unsigned argc, Value* vp)
- {
-     JS::CallArgs args = CallArgsFromVp(argc, vp);
-     ContextOptions oldContextOptions = ContextOptionsRef(cx);
- 
-     RootedString str(cx);
--    JSAutoByteString opt;
-+    JS::UniqueChars opt;
-     for (unsigned i = 0; i < args.length(); ++i) {
-         str = ToString(cx, args[i]);
-         if (!str)
-             return false;
- 
--        opt.clear();
--        if (!opt.encodeUtf8(cx, str))
-+        opt = JS_EncodeStringToUTF8(cx, str);
-+        if (!opt)
-             return false;
- 
--        if (strcmp(opt.ptr(), "strict") == 0)
-+        if (strcmp(opt.get(), "strict") == 0)
-             ContextOptionsRef(cx).toggleExtraWarnings();
--        else if (strcmp(opt.ptr(), "werror") == 0)
-+        else if (strcmp(opt.get(), "werror") == 0)
-             ContextOptionsRef(cx).toggleWerror();
--        else if (strcmp(opt.ptr(), "strict_mode") == 0)
-+        else if (strcmp(opt.get(), "strict_mode") == 0)
-             ContextOptionsRef(cx).toggleStrictMode();
-         else {
-             JS_ReportErrorUTF8(cx, "unknown option name '%s'. The valid names are "
--                               "strict, werror, and strict_mode.", opt.ptr());
-+                               "strict, werror, and strict_mode.", opt.get());
-             return false;
-         }
-     }
- 
-     UniqueChars names;
-     if (oldContextOptions.extraWarnings()) {
-         names = JS_sprintf_append(std::move(names), "%s", "strict");
-         if (!names) {
-@@ -721,21 +721,21 @@ ProcessLine(AutoJSAPI& jsapi, const char
-     if (!JS_ExecuteScript(cx, script, &result))
-         return false;
- 
-     if (result.isUndefined())
-         return true;
-     RootedString str(cx);
-     if (!(str = ToString(cx, result)))
-         return false;
--    JSAutoByteString bytes;
--    if (!bytes.encodeLatin1(cx, str))
-+    JS::UniqueChars bytes = JS_EncodeString(cx, str);
-+    if (!bytes)
-         return false;
- 
--    fprintf(gOutFile, "%s\n", bytes.ptr());
-+    fprintf(gOutFile, "%s\n", bytes.get());
-     return true;
- }
- 
- static bool
- ProcessFile(AutoJSAPI& jsapi, const char* filename, FILE* file, bool forceTTY)
- {
-     JSContext* cx = jsapi.cx();
-     JS::Rooted<JSObject*> global(cx, JS::CurrentGlobalOrNull(cx));
-diff --git a/js/xpconnect/src/XPCThrower.cpp b/js/xpconnect/src/XPCThrower.cpp
---- a/js/xpconnect/src/XPCThrower.cpp
-+++ b/js/xpconnect/src/XPCThrower.cpp
-@@ -3,17 +3,17 @@
- /* This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- /* Code for throwing errors into JavaScript. */
- 
- #include "xpcprivate.h"
- #include "XPCWrapper.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/Printf.h"
- #include "mozilla/dom/BindingUtils.h"
- #include "mozilla/dom/DOMException.h"
- #include "mozilla/dom/Exceptions.h"
- #include "nsString.h"
- 
- using namespace mozilla;
- using namespace mozilla::dom;
-@@ -159,20 +159,23 @@ void
- XPCThrower::Verbosify(XPCCallContext& ccx,
-                       char** psz, bool own)
- {
-     char* sz = nullptr;
- 
-     if (ccx.HasInterfaceAndMember()) {
-         XPCNativeInterface* iface = ccx.GetInterface();
-         jsid id = ccx.GetMember()->GetName();
--        JSAutoByteString bytes;
--        const char* name = JSID_IS_VOID(id) ? "Unknown" : bytes.encodeLatin1(ccx, JSID_TO_STRING(id));
--        if (!name) {
--            name = "";
-+        const char* name;
-+        JS::UniqueChars bytes;
-+        if (!JSID_IS_VOID(id)) {
-+            bytes = JS_EncodeString(ccx, JSID_TO_STRING(id));
-+            name = bytes ? bytes.get() : "";
-+        } else {
-+            name = "Unknown";
-         }
-         sz = JS_smprintf("%s [%s.%s]", *psz, iface->GetNameString(), name).release();
-     }
- 
-     if (sz) {
-         if (own)
-             js_free(*psz);
-         *psz = sz;
-diff --git a/js/xpconnect/src/XPCWrappedNativeJSOps.cpp b/js/xpconnect/src/XPCWrappedNativeJSOps.cpp
---- a/js/xpconnect/src/XPCWrappedNativeJSOps.cpp
-+++ b/js/xpconnect/src/XPCWrappedNativeJSOps.cpp
-@@ -5,17 +5,17 @@
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- /* JavaScript JSClasses and JSOps for our Wrapped Native JS Objects. */
- 
- #include "xpcprivate.h"
- #include "xpc_make_class.h"
- #include "mozilla/dom/BindingUtils.h"
- #include "mozilla/Preferences.h"
--#include "js/AutoByteString.h"
-+#include "js/CharacterEncoding.h"
- #include "js/Class.h"
- #include "js/Printf.h"
- 
- using namespace mozilla;
- using namespace JS;
- 
- /***************************************************************************/
- 
-@@ -284,30 +284,47 @@ DefinePropertyIfFound(XPCCallContext& cc
-             }
-         }
-         // This *might* be a tearoff name that is not yet part of our
-         // set. Let's lookup the name and see if it is the name of an
-         // interface. Then we'll see if the object actually *does* this
-         // interface and add a tearoff as necessary.
- 
-         if (wrapperToReflectInterfaceNames) {
--            JSAutoByteString name;
-+            JS::UniqueChars name;
-             RefPtr<XPCNativeInterface> iface2;
-             XPCWrappedNativeTearOff* to;
-             RootedObject jso(ccx);
-             nsresult rv = NS_OK;
- 
--            if (JSID_IS_STRING(id) &&
--                name.encodeLatin1(ccx, JSID_TO_STRING(id)) &&
--                (iface2 = XPCNativeInterface::GetNewOrUsed(name.ptr())) &&
--                nullptr != (to = wrapperToReflectInterfaceNames->
--                           FindTearOff(iface2, true, &rv)) &&
--                nullptr != (jso = to->GetJSObject()))
-+            bool defineProperty = false;
-+            do {
-+                if (!JSID_IS_STRING(id))
-+                    break;
-+
-+                name = JS_EncodeString(ccx, JSID_TO_STRING(id));
-+                if (!name)
-+                    break;
-+
-+                iface2 = XPCNativeInterface::GetNewOrUsed(name.get());
-+                if (!iface2)
-+                    break;
- 
--            {
-+                to = wrapperToReflectInterfaceNames->FindTearOff(iface2, true, &rv);
-+                if (!to)
-+                    break;
-+
-+                jso = to->GetJSObject();
-+                if (!jso)
-+                    break;
-+
-+                defineProperty = true;
-+            } while (false);
-+
-+            if (defineProperty) {
-                 AutoResolveName arn(ccx, id);
-                 if (resolved)
-                     *resolved = true;
-                 return JS_DefinePropertyById(ccx, obj, id, jso,
-                                              propFlags & ~JSPROP_ENUMERATE);
-             } else if (NS_FAILED(rv) && rv != NS_ERROR_NO_INTERFACE) {
-                 return Throw(rv, ccx);
-             }
-diff --git a/toolkit/recordreplay/ipc/JSControl.cpp b/toolkit/recordreplay/ipc/JSControl.cpp
---- a/toolkit/recordreplay/ipc/JSControl.cpp
-+++ b/toolkit/recordreplay/ipc/JSControl.cpp
-@@ -1,16 +1,17 @@
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-  * vim: set ts=8 sts=4 et sw=4 tw=99:
-  * This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "JSControl.h"
- 
-+#include "js/CharacterEncoding.h"
- #include "js/Conversions.h"
- #include "js/JSON.h"
- #include "ChildInternal.h"
- #include "ParentInternal.h"
- #include "xpcprivate.h"
- 
- using namespace JS;
- 
-@@ -797,22 +798,21 @@ RecordReplay_Dump(JSContext* aCx, unsign
-   // This method is an alternative to dump() that can be used in places where
-   // thread events are disallowed.
-   CallArgs args = CallArgsFromVp(aArgc, aVp);
-   for (size_t i = 0; i < args.length(); i++) {
-     RootedString str(aCx, ToString(aCx, args[i]));
-     if (!str) {
-       return false;
-     }
--    char* cstr = JS_EncodeString(aCx, str);
-+    JS::UniqueChars cstr = JS_EncodeString(aCx, str);
-     if (!cstr) {
-       return false;
-     }
--    Print("%s", cstr);
--    JS_free(aCx, cstr);
-+    Print("%s", cstr.get());
-   }
- 
-   args.rval().setUndefined();
-   return true;
- }
- 
- ///////////////////////////////////////////////////////////////////////////////
- // Plumbing
-diff --git a/tools/fuzzing/messagemanager/MessageManagerFuzzer.cpp b/tools/fuzzing/messagemanager/MessageManagerFuzzer.cpp
---- a/tools/fuzzing/messagemanager/MessageManagerFuzzer.cpp
-+++ b/tools/fuzzing/messagemanager/MessageManagerFuzzer.cpp
-@@ -4,16 +4,17 @@
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include <climits>
- #include <cmath>
- #include "FuzzingTraits.h"
- #include "jsapi.h"
- #include "jsfriendapi.h"
-+#include "js/CharacterEncoding.h"
- #include "prenv.h"
- #include "MessageManagerFuzzer.h"
- #include "mozilla/ErrorResult.h"
- #include "nsDebug.h"
- #include "nsError.h"
- #include "nsFrameMessageManager.h"
- #include "nsJSUtils.h"
- #include "nsXULAppAPI.h"
-@@ -190,19 +191,20 @@ MessageManagerFuzzer::MutateValue(JSCont
- 
-   if (aValue.isString()) {
-     nsCString x = GetFuzzValueFromFile();
-     if (x.IsEmpty()) {
-       return false;
-     }
-     JSString* str = JS_NewStringCopyZ(aCx, x.get());
-     aOutMutationValue.set(JS::StringValue(str));
-+    JS::UniqueChars valueChars = JS_EncodeString(aCx, aValue.toString());
-     MSGMGR_FUZZER_LOG("%*s! Mutated value of type |string|: '%s' to '%s'",
-                       aRecursionCounter * 4, "",
--                      JS_EncodeString(aCx, aValue.toString()), x.get());
-+                      valueChars.get(), x.get());
-     return true;
-   }
- 
-   if (aValue.isObject()) {
-     aRecursionCounter++;
-     MSGMGR_FUZZER_LOG("%*s<Enumerating found object>",
-                       aRecursionCounter * 4, "");
-     MutateObject(aCx, aValue, aRecursionCounter);
-@@ -253,19 +255,20 @@ MessageManagerFuzzer::Mutate(JSContext* 
-   }
- 
-   // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1346040
-   aData->Copy(mutatedStructuredCloneData);
- 
-   /* Mutated and successfully written to StructuredCloneData object. */
-   if (isMutated) {
-     JS::RootedString str(aCx, JS_ValueToSource(aCx, scdMutationContent));
-+    JS::UniqueChars strChars = JS_EncodeStringToUTF8(aCx, str);
-     MSGMGR_FUZZER_LOG("Mutated '%s' Message: %s",
-                       NS_ConvertUTF16toUTF8(aMessageName).get(),
--                      JS_EncodeStringToUTF8(aCx, str));
-+                      strChars.get());
-   }
- 
-   return true;
- }
- 
- /* static */
- unsigned int
- MessageManagerFuzzer::DefaultMutationProbability()

+ 0 - 406
frg/work-js/mozilla-release/patches/mozilla-central_435000.patch

@@ -1,406 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536135909 25200
-#      Wed Sep 05 01:25:09 2018 -0700
-# Node ID 8cc4218166b8e2de6712dfbadf5a927401e49d3d
-# Parent  775159907c734fcef22df5b9a26316aa78dad732
-Bug 1485066 - Part 3: Replace calls to JS_EncodeString for string comparison with StringEqualsAscii. r=Waldo
-
-diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
---- a/js/src/builtin/TestingFunctions.cpp
-+++ b/js/src/builtin/TestingFunctions.cpp
-@@ -2910,27 +2910,27 @@ const JSPropertySpec CloneBufferObject::
-     JS_PS_END
- };
- 
- static mozilla::Maybe<JS::StructuredCloneScope>
- ParseCloneScope(JSContext* cx, HandleString str)
- {
-     mozilla::Maybe<JS::StructuredCloneScope> scope;
- 
--    UniqueChars scopeStr = JS_EncodeString(cx, str);
-+    JSLinearString* scopeStr = str->ensureLinear(cx);
-     if (!scopeStr)
-         return scope;
- 
--    if (strcmp(scopeStr.get(), "SameProcessSameThread") == 0)
-+    if (StringEqualsAscii(scopeStr, "SameProcessSameThread"))
-         scope.emplace(JS::StructuredCloneScope::SameProcessSameThread);
--    else if (strcmp(scopeStr.get(), "SameProcessDifferentThread") == 0)
-+    else if (StringEqualsAscii(scopeStr, "SameProcessDifferentThread"))
-         scope.emplace(JS::StructuredCloneScope::SameProcessDifferentThread);
--    else if (strcmp(scopeStr.get(), "DifferentProcess") == 0)
-+    else if (StringEqualsAscii(scopeStr, "DifferentProcess"))
-         scope.emplace(JS::StructuredCloneScope::DifferentProcess);
--    else if (strcmp(scopeStr.get(), "DifferentProcessForIndexedDB") == 0)
-+    else if (StringEqualsAscii(scopeStr, "DifferentProcessForIndexedDB"))
-         scope.emplace(JS::StructuredCloneScope::DifferentProcessForIndexedDB);
- 
-     return scope;
- }
- 
- static bool
- Serialize(JSContext* cx, unsigned argc, Value* vp)
- {
-@@ -2947,23 +2947,23 @@ Serialize(JSContext* cx, unsigned argc, 
-         RootedValue v(cx);
-         if (!JS_GetProperty(cx, opts, "SharedArrayBuffer", &v))
-             return false;
- 
-         if (!v.isUndefined()) {
-             JSString* str = JS::ToString(cx, v);
-             if (!str)
-                 return false;
--            UniqueChars poli = JS_EncodeString(cx, str);
-+            JSLinearString* poli = str->ensureLinear(cx);
-             if (!poli)
-                 return false;
- 
--            if (strcmp(poli.get(), "allow") == 0) {
-+            if (StringEqualsAscii(poli, "allow")) {
-                 // default
--            } else if (strcmp(poli.get(), "deny") == 0) {
-+            } else if (StringEqualsAscii(poli, "deny")) {
-                 policy.denySharedArrayBuffer();
-             } else {
-                 JS_ReportErrorASCII(cx, "Invalid policy value for 'SharedArrayBuffer'");
-                 return false;
-             }
-         }
- 
-         if (!JS_GetProperty(cx, opts, "scope", &v))
-@@ -4117,41 +4117,41 @@ SetGCCallback(JSContext* cx, unsigned ar
- 
-     RootedValue v(cx);
-     if (!JS_GetProperty(cx, opts, "action", &v))
-         return false;
- 
-     JSString* str = JS::ToString(cx, v);
-     if (!str)
-         return false;
--    UniqueChars action = JS_EncodeString(cx, str);
-+    RootedLinearString action(cx, str->ensureLinear(cx));
-     if (!action)
-         return false;
- 
-     int32_t phases = 0;
--    if ((strcmp(action.get(), "minorGC") == 0) || (strcmp(action.get(), "majorGC") == 0)) {
-+    if (StringEqualsAscii(action, "minorGC") || StringEqualsAscii(action, "majorGC")) {
-         if (!JS_GetProperty(cx, opts, "phases", &v))
-             return false;
-         if (v.isUndefined()) {
-             phases = (1 << JSGC_END);
-         } else {
-             JSString* str = JS::ToString(cx, v);
-             if (!str)
-                 return false;
--            UniqueChars phasesStr = JS_EncodeString(cx, str);
-+            JSLinearString* phasesStr = str->ensureLinear(cx);
-             if (!phasesStr)
-                 return false;
- 
--            if (strcmp(phasesStr.get(), "begin") == 0)
-+            if (StringEqualsAscii(phasesStr, "begin")) {
-                 phases = (1 << JSGC_BEGIN);
--            else if (strcmp(phasesStr.get(), "end") == 0)
-+            } else if (StringEqualsAscii(phasesStr, "end")) {
-                 phases = (1 << JSGC_END);
--            else if (strcmp(phasesStr.get(), "both") == 0)
-+            } else if (StringEqualsAscii(phasesStr, "both")) {
-                 phases = (1 << JSGC_BEGIN) | (1 << JSGC_END);
--            else {
-+            } else {
-                 JS_ReportErrorASCII(cx, "Invalid callback phase");
-                 return false;
-             }
-         }
-     }
- 
-     if (gcCallback::prevMajorGC) {
-         JS_SetGCCallback(cx, nullptr, nullptr);
-@@ -4160,27 +4160,27 @@ SetGCCallback(JSContext* cx, unsigned ar
-     }
- 
-     if (gcCallback::prevMinorGC) {
-         JS_SetGCCallback(cx, nullptr, nullptr);
-         js_delete<gcCallback::MinorGC>(gcCallback::prevMinorGC);
-         gcCallback::prevMinorGC = nullptr;
-     }
- 
--    if (strcmp(action.get(), "minorGC") == 0) {
-+    if (StringEqualsAscii(action, "minorGC")) {
-         auto info = js_new<gcCallback::MinorGC>();
-         if (!info) {
-             ReportOutOfMemory(cx);
-             return false;
-         }
- 
-         info->phases = phases;
-         info->active = true;
-         JS_SetGCCallback(cx, gcCallback::minorGC, info);
--    } else if (strcmp(action.get(), "majorGC") == 0) {
-+    } else if (StringEqualsAscii(action, "majorGC")) {
-         if (!JS_GetProperty(cx, opts, "depth", &v))
-             return false;
-         int32_t depth = 1;
-         if (!v.isUndefined()) {
-             if (!ToInt32(cx, v, &depth))
-                 return false;
-         }
-         if (depth < 0) {
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -1467,43 +1467,46 @@ Options(JSContext* cx, unsigned argc, Va
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
- 
-     JS::ContextOptions oldContextOptions = JS::ContextOptionsRef(cx);
-     for (unsigned i = 0; i < args.length(); i++) {
-         RootedString str(cx, JS::ToString(cx, args[i]));
-         if (!str)
-             return false;
--        args[i].setString(str);
--
--        UniqueChars opt = JS_EncodeStringToUTF8(cx, str);
-+
-+        RootedLinearString opt(cx, str->ensureLinear(cx));
-         if (!opt)
-             return false;
- 
--        if (strcmp(opt.get(), "strict") == 0) {
-+        if (StringEqualsAscii(opt, "strict")) {
-             JS::ContextOptionsRef(cx).toggleExtraWarnings();
--        } else if (strcmp(opt.get(), "werror") == 0) {
-+        } else if (StringEqualsAscii(opt, "werror")) {
-             // Disallow toggling werror when there are off-thread jobs, to avoid
-             // confusing CompileError::throwError.
-             ShellContext* sc = GetShellContext(cx);
-             if (!sc->offThreadJobs.empty()) {
-                 JS_ReportErrorASCII(cx, "can't toggle werror when there are off-thread jobs");
-                 return false;
-             }
-             JS::ContextOptionsRef(cx).toggleWerror();
--        } else if (strcmp(opt.get(), "throw_on_asmjs_validation_failure") == 0) {
-+        } else if (StringEqualsAscii(opt, "throw_on_asmjs_validation_failure")) {
-             JS::ContextOptionsRef(cx).toggleThrowOnAsmJSValidationFailure();
--        } else if (strcmp(opt.get(), "strict_mode") == 0) {
-+        } else if (StringEqualsAscii(opt, "strict_mode")) {
-             JS::ContextOptionsRef(cx).toggleStrictMode();
-         } else {
-+            UniqueChars optChars = JS_EncodeStringToUTF8(cx, opt);
-+            if (!optChars)
-+                return false;
-+
-             JS_ReportErrorUTF8(cx,
-                                "unknown option name '%s'."
-                                " The valid names are strict,"
-                                " werror, and strict_mode.",
--                               opt.get());
-+                               optChars.get());
-             return false;
-         }
-     }
- 
-     UniqueChars names = DuplicateString("");
-     bool found = false;
-     if (names && oldContextOptions.extraWarnings()) {
-         names = JS_sprintf_append(std::move(names), "%s%s", found ? "," : "", "strict");
-@@ -5327,23 +5330,16 @@ class AutoCStringVector
-     }
-     char* operator[](size_t i) const {
-         return argv_[i];
-     }
-     void replace(size_t i, UniqueChars arg) {
-         js_free(argv_[i]);
-         argv_[i] = arg.release();
-     }
--    const char* back() const {
--        return argv_.back();
--    }
--    void replaceBack(UniqueChars arg) {
--        js_free(argv_.back());
--        argv_.back() = arg.release();
--    }
- };
- 
- #if defined(XP_WIN)
- static bool
- EscapeForShell(JSContext* cx, AutoCStringVector& argv)
- {
-     // Windows will break arguments in argv by various spaces, so we wrap each
-     // argument in quotes and escape quotes within. Even with quotes, \ will be
-@@ -5412,36 +5408,42 @@ NestedShell(JSContext* cx, unsigned argc
-     // Propagate selected flags from the current shell
-     for (unsigned i = 0; i < sPropagatedFlags.length(); i++) {
-         UniqueChars flags = DuplicateString(cx, sPropagatedFlags[i]);
-         if (!flags || !argv.append(std::move(flags)))
-             return false;
-     }
- 
-     // The arguments to nestedShell are stringified and append to argv.
--    RootedString str(cx);
-     for (unsigned i = 0; i < args.length(); i++) {
--        str = ToString(cx, args[i]);
-+        JSString* str = ToString(cx, args[i]);
-         if (!str)
-             return false;
- 
--        UniqueChars arg = JS_EncodeString(cx, str);
--        if (!arg || !argv.append(std::move(arg)))
--            return false;
--
--        // As a special case, if the caller passes "--js-cache", replace that
--        // with "--js-cache=$(jsCacheDir)"
--        if (!strcmp(argv.back(), "--js-cache") && jsCacheDir) {
--            UniqueChars newArg = JS_smprintf("--js-cache=%s", jsCacheDir);
--            if (!newArg) {
-+        JSLinearString* linear = str->ensureLinear(cx);
-+        if (!linear)
-+            return false;
-+
-+        UniqueChars arg;
-+        if (StringEqualsAscii(linear, "--js-cache") && jsCacheDir) {
-+            // As a special case, if the caller passes "--js-cache", use
-+            // "--js-cache=$(jsCacheDir)" instead.
-+            arg = JS_smprintf("--js-cache=%s", jsCacheDir);
-+            if (!arg) {
-                 JS_ReportOutOfMemory(cx);
-                 return false;
-             }
--            argv.replaceBack(std::move(newArg));
--        }
-+        } else {
-+            arg = JS_EncodeString(cx, str);
-+            if (!arg)
-+                return false;
-+        }
-+
-+        if (!argv.append(std::move(arg)))
-+            return false;
-     }
- 
-     // execv assumes argv is null-terminated
-     if (!argv.append(nullptr))
-         return false;
- 
-     int status = 0;
- #if defined(XP_WIN)
-diff --git a/js/xpconnect/src/Sandbox.cpp b/js/xpconnect/src/Sandbox.cpp
---- a/js/xpconnect/src/Sandbox.cpp
-+++ b/js/xpconnect/src/Sandbox.cpp
-@@ -849,79 +849,83 @@ xpc::GlobalProperties::Parse(JSContext* 
-     for (uint32_t i = 0; i < length; i++) {
-         RootedValue nameValue(cx);
-         ok = JS_GetElement(cx, obj, i, &nameValue);
-         NS_ENSURE_TRUE(ok, false);
-         if (!nameValue.isString()) {
-             JS_ReportErrorASCII(cx, "Property names must be strings");
-             return false;
-         }
--        RootedString nameStr(cx, nameValue.toString());
--        JS::UniqueChars name = JS_EncodeStringToUTF8(cx, nameStr);
--        if (!name)
-+        JSFlatString* nameStr = JS_FlattenString(cx, nameValue.toString());
-+        if (!nameStr)
-             return false;
--        if (!strcmp(name.get(), "Blob")) {
-+        if (JS_FlatStringEqualsAscii(nameStr, "Blob")) {
-             Blob = true;
--        } else if (!strcmp(name.get(), "ChromeUtils")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "ChromeUtils")) {
-             ChromeUtils = true;
--        } else if (!strcmp(name.get(), "CSS")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "CSS")) {
-             CSS = true;
--        } else if (!strcmp(name.get(), "CSSRule")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "CSSRule")) {
-             CSSRule = true;
--        } else if (!strcmp(name.get(), "Directory")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "Directory")) {
-             Directory = true;
--        } else if (!strcmp(name.get(), "DOMParser")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "DOMParser")) {
-             DOMParser = true;
--        } else if (!strcmp(name.get(), "Element")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "Element")) {
-             Element = true;
--        } else if (!strcmp(name.get(), "Event")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "Event")) {
-             Event = true;
--        } else if (!strcmp(name.get(), "File")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "File")) {
-             File = true;
--        } else if (!strcmp(name.get(), "FileReader")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "FileReader")) {
-             FileReader = true;
--        } else if (!strcmp(name.get(), "FormData")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "FormData")) {
-             FormData = true;
--        } else if (!strcmp(name.get(), "InspectorUtils")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "InspectorUtils")) {
-             InspectorUtils = true;
--        } else if (!strcmp(name.get(), "MessageChannel")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "MessageChannel")) {
-             MessageChannel = true;
--        } else if (!strcmp(name.get(), "Node")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "Node")) {
-             Node = true;
--        } else if (!strcmp(name.get(), "NodeFilter")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "NodeFilter")) {
-             NodeFilter = true;
--        } else if (!strcmp(name.get(), "TextDecoder")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "TextDecoder")) {
-             TextDecoder = true;
--        } else if (!strcmp(name.get(), "TextEncoder")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "TextEncoder")) {
-             TextEncoder = true;
--        } else if (!strcmp(name.get(), "URL")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "URL")) {
-             URL = true;
--        } else if (!strcmp(name.get(), "URLSearchParams")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "URLSearchParams")) {
-             URLSearchParams = true;
--        } else if (!strcmp(name.get(), "XMLHttpRequest")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "XMLHttpRequest")) {
-             XMLHttpRequest = true;
--        } else if (!strcmp(name.get(), "XMLSerializer")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "XMLSerializer")) {
-             XMLSerializer = true;
--        } else if (!strcmp(name.get(), "atob")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "atob")) {
-             atob = true;
--        } else if (!strcmp(name.get(), "btoa")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "btoa")) {
-             btoa = true;
--        } else if (!strcmp(name.get(), "caches")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "caches")) {
-             caches = true;
--        } else if (!strcmp(name.get(), "crypto")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "crypto")) {
-             crypto = true;
--        } else if (!strcmp(name.get(), "fetch")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "fetch")) {
-             fetch = true;
--        } else if (!strcmp(name.get(), "indexedDB")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "indexedDB")) {
-             indexedDB = true;
- #ifdef MOZ_WEBRTC
--        } else if (!strcmp(name.get(), "rtcIdentityProvider")) {
-+        } else if (JS_FlatStringEqualsAscii(nameStr, "rtcIdentityProvider")) {
-             rtcIdentityProvider = true;
- #endif
-         } else {
-+            RootedString nameStr(cx, nameValue.toString());
-+            JS::UniqueChars name = JS_EncodeStringToUTF8(cx, nameStr);
-+            if (!name)
-+                return false;
-+
-             JS_ReportErrorUTF8(cx, "Unknown property name: %s", name.get());
-             return false;
-         }
-     }
-     return true;
- }
- 
- bool

+ 0 - 334
frg/work-js/mozilla-release/patches/mozilla-central_435001.patch

@@ -1,334 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536135910 25200
-#      Wed Sep 05 01:25:10 2018 -0700
-# Node ID 3f546769e86c56ad6f38550a2216ab51c0c07c8d
-# Parent  8cc4218166b8e2de6712dfbadf5a927401e49d3d
-Bug 1485066 - Part 4: Replace AtomToPrintableString UniqueChars out-param with UniqueChars return-type. r=Waldo
-
-diff --git a/js/src/frontend/EmitterScope.cpp b/js/src/frontend/EmitterScope.cpp
---- a/js/src/frontend/EmitterScope.cpp
-+++ b/js/src/frontend/EmitterScope.cpp
-@@ -394,18 +394,18 @@ EmitterScope::deadZoneFrameSlotRange(Byt
- void
- EmitterScope::dump(BytecodeEmitter* bce)
- {
-     fprintf(stdout, "EmitterScope [%s] %p\n", ScopeKindString(scope(bce)->kind()), this);
- 
-     for (NameLocationMap::Range r = nameCache_->all(); !r.empty(); r.popFront()) {
-         const NameLocation& l = r.front().value();
- 
--        UniqueChars bytes;
--        if (!AtomToPrintableString(bce->cx, r.front().key(), &bytes))
-+        UniqueChars bytes = AtomToPrintableString(bce->cx, r.front().key());
-+        if (!bytes)
-             return;
-         if (l.kind() != NameLocation::Kind::Dynamic)
-             fprintf(stdout, "  %s %s ", BindingKindString(l.bindingKind()), bytes.get());
-         else
-             fprintf(stdout, "  %s ", bytes.get());
- 
-         switch (l.kind()) {
-           case NameLocation::Kind::Dynamic:
-diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
---- a/js/src/frontend/Parser.cpp
-+++ b/js/src/frontend/Parser.cpp
-@@ -165,18 +165,18 @@ void
- ParseContext::Scope::dump(ParseContext* pc)
- {
-     JSContext* cx = pc->sc()->context;
- 
-     fprintf(stdout, "ParseScope %p", this);
- 
-     fprintf(stdout, "\n  decls:\n");
-     for (DeclaredNameMap::Range r = declared_->all(); !r.empty(); r.popFront()) {
--        UniqueChars bytes;
--        if (!AtomToPrintableString(cx, r.front().key(), &bytes))
-+        UniqueChars bytes = AtomToPrintableString(cx, r.front().key());
-+        if (!bytes)
-             return;
-         DeclaredNameInfo& info = r.front().value().wrapped;
-         fprintf(stdout, "    %s %s%s\n",
-                 DeclarationKindString(info.kind()),
-                 bytes.get(),
-                 info.closedOver() ? " (closed over)" : "");
-     }
- 
-@@ -1221,18 +1221,18 @@ GeneralParser<ParseHandler, CharT>::repo
- }
- 
- template <class ParseHandler, typename CharT>
- void
- GeneralParser<ParseHandler, CharT>::reportRedeclaration(HandlePropertyName name,
-                                                         DeclarationKind prevKind,
-                                                         TokenPos pos, uint32_t prevPos)
- {
--    UniqueChars bytes;
--    if (!AtomToPrintableString(context, name, &bytes))
-+    UniqueChars bytes = AtomToPrintableString(context, name);
-+    if (!bytes)
-         return;
- 
-     if (prevPos == DeclaredNameInfo::npos) {
-         errorAt(pos.begin, JSMSG_REDECLARED_VAR, DeclarationKindString(prevKind), bytes.get());
-         return;
-     }
- 
-     auto notes = MakeUnique<JSErrorNotes>();
-@@ -1285,18 +1285,18 @@ GeneralParser<ParseHandler, CharT>::note
-             return false;
-         }
- 
-         // Strict-mode disallows duplicate args. We may not know whether we are
-         // in strict mode or not (since the function body hasn't been parsed).
-         // In such cases, report will queue up the potential error and return
-         // 'true'.
-         if (pc->sc()->needStrictChecks()) {
--            UniqueChars bytes;
--            if (!AtomToPrintableString(context, name, &bytes))
-+            UniqueChars bytes = AtomToPrintableString(context, name);
-+            if (!bytes)
-                 return false;
-             if (!strictModeError(JSMSG_DUPLICATE_FORMAL, bytes.get()))
-                 return false;
-         }
- 
-         *duplicatedParam = true;
-     } else {
-         DeclarationKind kind = DeclarationKind::PositionalFormalParameter;
-@@ -2420,18 +2420,18 @@ Parser<FullParseHandler, CharT>::moduleB
- 
-     // Check exported local bindings exist and mark them as closed over.
-     for (auto entry : modulesc->builder.localExportEntries()) {
-         JSAtom* name = entry->localName();
-         MOZ_ASSERT(name);
- 
-         DeclaredNamePtr p = modulepc.varScope().lookupDeclaredName(name);
-         if (!p) {
--            UniqueChars str;
--            if (!AtomToPrintableString(context, name, &str))
-+            UniqueChars str = AtomToPrintableString(context, name);
-+            if (!str)
-                 return null();
- 
-             errorAt(TokenStream::NoOffset, JSMSG_MISSING_EXPORT, str.get());
-             return null();
-         }
- 
-         p->value()->setClosedOver();
-     }
-@@ -5458,18 +5458,18 @@ GeneralParser<ParseHandler, CharT>::impo
- 
- template<typename CharT>
- bool
- Parser<FullParseHandler, CharT>::checkExportedName(JSAtom* exportName)
- {
-     if (!pc->sc()->asModuleContext()->builder.hasExportedName(exportName))
-         return true;
- 
--    UniqueChars str;
--    if (!AtomToPrintableString(context, exportName, &str))
-+    UniqueChars str = AtomToPrintableString(context, exportName);
-+    if (!str)
-         return false;
- 
-     error(JSMSG_DUPLICATE_EXPORT_NAME, str.get());
-     return false;
- }
- 
- template<typename CharT>
- inline bool
-diff --git a/js/src/vm/BytecodeUtil.cpp b/js/src/vm/BytecodeUtil.cpp
---- a/js/src/vm/BytecodeUtil.cpp
-+++ b/js/src/vm/BytecodeUtil.cpp
-@@ -1184,18 +1184,18 @@ ToDisassemblySource(JSContext* cx, Handl
- {
-     UniqueChars source = JS_smprintf("%s {", ScopeKindString(scope->kind()));
-     if (!source) {
-         ReportOutOfMemory(cx);
-         return false;
-     }
- 
-     for (Rooted<BindingIter> bi(cx, BindingIter(scope)); bi; bi++) {
--        UniqueChars nameBytes;
--        if (!AtomToPrintableString(cx, bi.name(), &nameBytes))
-+        UniqueChars nameBytes = AtomToPrintableString(cx, bi.name());
-+        if (!nameBytes)
-             return false;
- 
-         source = JS_sprintf_append(std::move(source), "%s: ", nameBytes.get());
-         if (!source) {
-             ReportOutOfMemory(cx);
-             return false;
-         }
- 
-diff --git a/js/src/vm/EnvironmentObject.cpp b/js/src/vm/EnvironmentObject.cpp
---- a/js/src/vm/EnvironmentObject.cpp
-+++ b/js/src/vm/EnvironmentObject.cpp
-@@ -3352,18 +3352,17 @@ js::CheckVarNameConflict(JSContext* cx, 
-         return false;
-     }
-     return true;
- }
- 
- static void
- ReportCannotDeclareGlobalBinding(JSContext* cx, HandlePropertyName name, const char* reason)
- {
--    UniqueChars printable;
--    if (AtomToPrintableString(cx, name, &printable)) {
-+    if (UniqueChars printable = AtomToPrintableString(cx, name)) {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr,
-                                    JSMSG_CANT_DECLARE_GLOBAL_BINDING,
-                                    printable.get(), reason);
-     }
- }
- 
- bool
- js::CheckCanDeclareGlobalBinding(JSContext* cx, Handle<GlobalObject*> global,
-diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
---- a/js/src/vm/Interpreter.cpp
-+++ b/js/src/vm/Interpreter.cpp
-@@ -5376,18 +5376,17 @@ js::ReportRuntimeLexicalError(JSContext*
-     }
- 
-     ReportRuntimeLexicalError(cx, errorNumber, name);
- }
- 
- void
- js::ReportRuntimeRedeclaration(JSContext* cx, HandlePropertyName name, const char* redeclKind)
- {
--    UniqueChars printable;
--    if (AtomToPrintableString(cx, name, &printable)) {
-+    if (UniqueChars printable = AtomToPrintableString(cx, name)) {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_REDECLARED_VAR,
-                                    redeclKind, printable.get());
-     }
- }
- 
- bool
- js::ThrowCheckIsObject(JSContext* cx, CheckIsObjectKind kind)
- {
-@@ -5457,17 +5456,18 @@ js::ThrowUninitializedThis(JSContext* cx
-         }
-         MOZ_ASSERT(fun);
-     }
- 
-     if (fun->isDerivedClassConstructor()) {
-         const char* name = "anonymous";
-         UniqueChars str;
-         if (fun->explicitName()) {
--            if (!AtomToPrintableString(cx, fun->explicitName(), &str))
-+            str = AtomToPrintableString(cx, fun->explicitName());
-+            if (!str)
-                 return false;
-             name = str.get();
-         }
- 
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_UNINITIALIZED_THIS, name);
-         return false;
-     }
- 
-diff --git a/js/src/vm/JSAtom.cpp b/js/src/vm/JSAtom.cpp
---- a/js/src/vm/JSAtom.cpp
-+++ b/js/src/vm/JSAtom.cpp
-@@ -111,24 +111,23 @@ inline JSAtom*
- js::AtomStateEntry::asPtr(JSContext* cx) const
- {
-     JSAtom* atom = asPtrUnbarriered();
-     if (!cx->helperThread())
-         JSString::readBarrier(atom);
-     return atom;
- }
- 
--const char*
--js::AtomToPrintableString(JSContext* cx, JSAtom* atom, UniqueChars* bytes)
-+UniqueChars
-+js::AtomToPrintableString(JSContext* cx, JSAtom* atom)
- {
-     JSString* str = QuoteString(cx, atom, 0);
-     if (!str)
-         return nullptr;
--    *bytes = EncodeLatin1(cx, str);
--    return bytes->get();
-+    return EncodeLatin1(cx, str);
- }
- 
- #define DEFINE_PROTO_STRING(name,init,clasp) const char js_##name##_str[] = #name;
- JS_FOR_EACH_PROTOTYPE(DEFINE_PROTO_STRING)
- #undef DEFINE_PROTO_STRING
- 
- #define CONST_CHAR_STR(idpart, id, text) const char js_##idpart##_str[] = text;
- FOR_EACH_COMMON_PROPERTYNAME(CONST_CHAR_STR)
-diff --git a/js/src/vm/JSAtom.h b/js/src/vm/JSAtom.h
---- a/js/src/vm/JSAtom.h
-+++ b/js/src/vm/JSAtom.h
-@@ -13,20 +13,19 @@
- #include "js/TypeDecls.h"
- #include "js/Utility.h"
- #include "vm/CommonPropertyNames.h"
- 
- namespace js {
- 
- /*
-  * Return a printable, lossless char[] representation of a string-type atom.
-- * The lifetime of the result matches the lifetime of bytes.
-  */
--extern const char*
--AtomToPrintableString(JSContext* cx, JSAtom* atom, UniqueChars* bytes);
-+extern UniqueChars
-+AtomToPrintableString(JSContext* cx, JSAtom* atom);
- 
- class PropertyName;
- 
- }  /* namespace js */
- 
- /* Well-known predefined C strings. */
- #define DECLARE_PROTO_STR(name,init,clasp) extern const char js_##name##_str[];
- JS_FOR_EACH_PROTOTYPE(DECLARE_PROTO_STR)
-diff --git a/js/src/vm/Scope.cpp b/js/src/vm/Scope.cpp
---- a/js/src/vm/Scope.cpp
-+++ b/js/src/vm/Scope.cpp
-@@ -1514,18 +1514,18 @@ PositionalFormalParameterIter::Positiona
-     settle();
- }
- 
- void
- js::DumpBindings(JSContext* cx, Scope* scopeArg)
- {
-     RootedScope scope(cx, scopeArg);
-     for (Rooted<BindingIter> bi(cx, BindingIter(scope)); bi; bi++) {
--        UniqueChars bytes;
--        if (!AtomToPrintableString(cx, bi.name(), &bytes))
-+        UniqueChars bytes = AtomToPrintableString(cx, bi.name());
-+        if (!bytes)
-             return;
-         fprintf(stderr, "%s %s ", BindingKindString(bi.kind()), bytes.get());
-         switch (bi.location().kind()) {
-           case BindingLocation::Kind::Global:
-             if (bi.isTopLevelFunction())
-                 fprintf(stderr, "global function\n");
-             else
-                 fprintf(stderr, "global\n");
-diff --git a/js/src/wasm/AsmJS.cpp b/js/src/wasm/AsmJS.cpp
---- a/js/src/wasm/AsmJS.cpp
-+++ b/js/src/wasm/AsmJS.cpp
-@@ -2011,18 +2011,17 @@ class MOZ_STACK_CLASS JS_HAZ_ROOTED Modu
-         failfVAOffset(pn->pn_pos.begin, fmt, ap);
-         va_end(ap);
-         return false;
-     }
- 
-     bool failNameOffset(uint32_t offset, const char* fmt, PropertyName* name) {
-         // This function is invoked without the caller properly rooting its locals.
-         gc::AutoSuppressGC suppress(cx_);
--        UniqueChars bytes;
--        if (AtomToPrintableString(cx_, name, &bytes))
-+        if (UniqueChars bytes = AtomToPrintableString(cx_, name))
-             failfOffset(offset, fmt, bytes.get());
-         return false;
-     }
- 
-     bool failName(ParseNode* pn, const char* fmt, PropertyName* name) {
-         return failNameOffset(pn->pn_pos.begin, fmt, name);
-     }
- 

+ 0 - 757
frg/work-js/mozilla-release/patches/mozilla-central_435002.patch

@@ -1,757 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536135910 25200
-#      Wed Sep 05 01:25:10 2018 -0700
-# Node ID a7f57108d94f9fc4a3172cd6500e192fd810314f
-# Parent  3f546769e86c56ad6f38550a2216ab51c0c07c8d
-Bug 1485066 - Part 5: Use js::EncodeLatin1/StringToNewUTF8CharsZ instead of JS_EncodeString[ToUTF8] for engine internal code. r=Waldo
-
-diff --git a/js/src/builtin/ReflectParse.cpp b/js/src/builtin/ReflectParse.cpp
---- a/js/src/builtin/ReflectParse.cpp
-+++ b/js/src/builtin/ReflectParse.cpp
-@@ -3389,17 +3389,17 @@ reflect_parse(JSContext* cx, uint32_t ar
-             if (!GetPropertyDefault(cx, config, sourceId, nullVal, &prop))
-                 return false;
- 
-             if (!prop.isNullOrUndefined()) {
-                 RootedString str(cx, ToString<CanGC>(cx, prop));
-                 if (!str)
-                     return false;
- 
--                filename = JS_EncodeString(cx, str);
-+                filename = EncodeLatin1(cx, str);
-                 if (!filename)
-                     return false;
-             }
- 
-             /* config.line */
-             RootedId lineId(cx, NameToId(cx->names().line));
-             RootedValue oneValue(cx, Int32Value(1));
-             if (!GetPropertyDefault(cx, config, lineId, oneValue, &prop) ||
-diff --git a/js/src/builtin/TypedObject.cpp b/js/src/builtin/TypedObject.cpp
---- a/js/src/builtin/TypedObject.cpp
-+++ b/js/src/builtin/TypedObject.cpp
-@@ -1594,17 +1594,17 @@ TypedObject::createZeroed(JSContext* cx,
- 
- static bool
- ReportTypedObjTypeError(JSContext* cx,
-                         const unsigned errorNumber,
-                         HandleTypedObject obj)
- {
-     // Serialize type string of obj
-     RootedAtom typeReprAtom(cx, &obj->typeDescr().stringRepr());
--    UniqueChars typeReprStr = JS_EncodeStringToUTF8(cx, typeReprAtom);
-+    UniqueChars typeReprStr = StringToNewUTF8CharsZ(cx, *typeReprAtom);
-     if (!typeReprStr)
-         return false;
- 
-     JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, errorNumber, typeReprStr.get());
-     return false;
- }
- 
- /* static */ void
-@@ -1701,17 +1701,17 @@ ReportPropertyError(JSContext* cx,
-                     const unsigned errorNumber,
-                     HandleId id)
- {
-     RootedValue idVal(cx, IdToValue(id));
-     RootedString str(cx, ValueToSource(cx, idVal));
-     if (!str)
-         return false;
- 
--    UniqueChars propName = JS_EncodeStringToUTF8(cx, str);
-+    UniqueChars propName = StringToNewUTF8CharsZ(cx, *str);
-     if (!propName)
-         return false;
- 
-     JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, errorNumber, propName.get());
-     return false;
- }
- 
- bool
-diff --git a/js/src/builtin/intl/Collator.cpp b/js/src/builtin/intl/Collator.cpp
---- a/js/src/builtin/intl/Collator.cpp
-+++ b/js/src/builtin/intl/Collator.cpp
-@@ -195,17 +195,17 @@ js::intl_Collator_availableLocales(JSCon
- 
- bool
- js::intl_availableCollations(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 1);
-     MOZ_ASSERT(args[0].isString());
- 
--    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, args[0].toString());
-     if (!locale)
-         return false;
-     UErrorCode status = U_ZERO_ERROR;
-     UEnumeration* values = ucol_getKeywordValuesForLocale("co", locale.get(), false, &status);
-     if (U_FAILURE(status)) {
-         ReportInternalError(cx);
-         return false;
-     }
-@@ -272,17 +272,17 @@ NewUCollator(JSContext* cx, Handle<Colla
-     RootedValue value(cx);
- 
-     RootedObject internals(cx, intl::GetInternalsObject(cx, collator));
-     if (!internals)
-         return nullptr;
- 
-     if (!GetProperty(cx, internals, internals, cx->names().locale, &value))
-         return nullptr;
--    UniqueChars locale = JS_EncodeString(cx, value.toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, value.toString());
-     if (!locale)
-         return nullptr;
- 
-     // UCollator options with default values.
-     UColAttributeValue uStrength = UCOL_DEFAULT;
-     UColAttributeValue uCaseLevel = UCOL_OFF;
-     UColAttributeValue uAlternate = UCOL_DEFAULT;
-     UColAttributeValue uNumeric = UCOL_OFF;
-diff --git a/js/src/builtin/intl/CommonFunctions.cpp b/js/src/builtin/intl/CommonFunctions.cpp
---- a/js/src/builtin/intl/CommonFunctions.cpp
-+++ b/js/src/builtin/intl/CommonFunctions.cpp
-@@ -4,16 +4,19 @@
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- /* Operations used to implement multiple Intl.* classes. */
- 
- #include "builtin/intl/CommonFunctions.h"
- 
- #include "mozilla/Assertions.h"
-+#include "mozilla/TextUtils.h"
-+
-+#include <algorithm>
- 
- #include "jsfriendapi.h" // for GetErrorMessage, JSMSG_INTERNAL_INTL_ERROR
- 
- #include "js/Value.h"
- #include "vm/JSContext.h"
- #include "vm/JSObject.h"
- #include "vm/SelfHosting.h"
- #include "vm/Stack.h"
-@@ -77,16 +80,42 @@ js::intl::GetInternalsObject(JSContext* 
- }
- 
- void
- js::intl::ReportInternalError(JSContext* cx)
- {
-     JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INTERNAL_INTL_ERROR);
- }
- 
-+js::UniqueChars
-+js::intl::EncodeLocale(JSContext* cx, JSString* locale)
-+{
-+#ifdef DEBUG
-+    auto containsOnlyValidBCP47Chars = [](auto* chars, size_t length) {
-+        return length > 0 &&
-+               mozilla::IsAsciiAlpha(chars[0]) &&
-+               std::all_of(chars, chars + length, [](auto c) {
-+                   return mozilla::IsAsciiAlphanumeric(c) || c == '-';
-+               });
-+    };
-+
-+    if (JSLinearString* linear = locale->ensureLinear(cx)) {
-+        JS::AutoCheckCannotGC nogc;
-+        MOZ_ASSERT(linear->hasLatin1Chars()
-+                   ? containsOnlyValidBCP47Chars(linear->latin1Chars(nogc), linear->length())
-+                   : containsOnlyValidBCP47Chars(linear->twoByteChars(nogc), linear->length()));
-+    } else {
-+        // Ignore OOM when only performing a debug assertion.
-+        cx->recoverFromOutOfMemory();
-+    }
-+#endif
-+
-+    return EncodeLatin1(cx, locale);
-+}
-+
- bool
- js::intl::GetAvailableLocales(JSContext* cx, CountAvailable countAvailable,
-                               GetAvailable getAvailable, JS::MutableHandle<JS::Value> result)
- {
-     RootedObject locales(cx, NewObjectWithGivenProto<PlainObject>(cx, nullptr));
-     if (!locales)
-         return false;
- 
-diff --git a/js/src/builtin/intl/CommonFunctions.h b/js/src/builtin/intl/CommonFunctions.h
---- a/js/src/builtin/intl/CommonFunctions.h
-+++ b/js/src/builtin/intl/CommonFunctions.h
-@@ -67,16 +67,19 @@ static inline const char*
- IcuLocale(const char* locale)
- {
-     if (StringsAreEqual(locale, "und"))
-         return ""; // ICU root locale
- 
-     return locale;
- }
- 
-+extern UniqueChars
-+EncodeLocale(JSContext* cx, JSString* locale);
-+
- // Starting with ICU 59, UChar defaults to char16_t.
- static_assert(mozilla::IsSame<UChar, char16_t>::value,
-               "SpiderMonkey doesn't support redefining UChar to a different type");
- 
- // The inline capacity we use for a Vector<char16_t>.  Use this to ensure that
- // our uses of ICU string functions, below and elsewhere, will try to fill the
- // buffer's entire inline capacity before growing it and heap-allocating.
- constexpr size_t INITIAL_CHAR_BUFFER_SIZE = 32;
-diff --git a/js/src/builtin/intl/DateTimeFormat.cpp b/js/src/builtin/intl/DateTimeFormat.cpp
---- a/js/src/builtin/intl/DateTimeFormat.cpp
-+++ b/js/src/builtin/intl/DateTimeFormat.cpp
-@@ -278,17 +278,17 @@ const CalendarAlias calendarAliases[] = 
- 
- bool
- js::intl_availableCalendars(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 1);
-     MOZ_ASSERT(args[0].isString());
- 
--    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     RootedObject calendars(cx, NewDenseEmptyArray(cx));
-     if (!calendars)
-         return false;
-     uint32_t index = 0;
- 
-@@ -355,17 +355,17 @@ js::intl_availableCalendars(JSContext* c
- 
- bool
- js::intl_defaultCalendar(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 1);
-     MOZ_ASSERT(args[0].isString());
- 
--    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     return DefaultCalendar(cx, locale, args.rval());
- }
- 
- bool
- js::intl_IsValidTimeZoneName(JSContext* cx, unsigned argc, Value* vp)
-@@ -522,17 +522,17 @@ js::intl_isDefaultTimeZone(JSContext* cx
- bool
- js::intl_patternForSkeleton(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 2);
-     MOZ_ASSERT(args[0].isString());
-     MOZ_ASSERT(args[1].isString());
- 
--    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     AutoStableStringChars skeleton(cx);
-     if (!skeleton.initTwoByte(cx, args[1].toString()))
-         return false;
- 
-     mozilla::Range<const char16_t> skelChars = skeleton.twoByteRange();
-@@ -559,17 +559,17 @@ js::intl_patternForSkeleton(JSContext* c
- 
- bool
- js::intl_patternForStyle(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 4);
-     MOZ_ASSERT(args[0].isString());
- 
--    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     UDateFormatStyle dateStyle = UDAT_NONE;
-     UDateFormatStyle timeStyle = UDAT_NONE;
- 
-     if (args[1].isString()) {
-         JSLinearString* dateStyleStr = args[1].toString()->ensureLinear(cx);
-@@ -640,17 +640,17 @@ NewUDateFormat(JSContext* cx, Handle<Dat
-     RootedValue value(cx);
- 
-     RootedObject internals(cx, intl::GetInternalsObject(cx, dateTimeFormat));
-     if (!internals)
-        return nullptr;
- 
-     if (!GetProperty(cx, internals, internals, cx->names().locale, &value))
-         return nullptr;
--    UniqueChars locale = JS_EncodeString(cx, value.toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, value.toString());
-     if (!locale)
-         return nullptr;
- 
-     // We don't need to look at calendar and numberingSystem - they can only be
-     // set via the Unicode locale extension and are therefore already set on
-     // locale.
- 
-     if (!GetProperty(cx, internals, internals, cx->names().timeZone, &value))
-diff --git a/js/src/builtin/intl/IntlObject.cpp b/js/src/builtin/intl/IntlObject.cpp
---- a/js/src/builtin/intl/IntlObject.cpp
-+++ b/js/src/builtin/intl/IntlObject.cpp
-@@ -45,17 +45,17 @@ using js::intl::IcuLocale;
- /******************** Intl ********************/
- 
- bool
- js::intl_GetCalendarInfo(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 1);
- 
--    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     UErrorCode status = U_ZERO_ERROR;
-     const UChar* uTimeZone = nullptr;
-     int32_t uTimeZoneLength = 0;
-     UCalendar* cal = ucal_open(uTimeZone, uTimeZoneLength, locale.get(), UCAL_DEFAULT, &status);
-     if (U_FAILURE(status)) {
-@@ -365,18 +365,17 @@ ComputeSingleDisplayName(JSContext* cx, 
- 
- bool
- js::intl_ComputeDisplayNames(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 3);
- 
-     // 1. Assert: locale is a string.
--    RootedString str(cx, args[0].toString());
--    UniqueChars locale = JS_EncodeStringToUTF8(cx, str);
-+    UniqueChars locale = intl::EncodeLocale(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     // 2. Assert: style is a string.
-     DisplayNameStyle dnStyle;
-     {
-         JSLinearString* style = args[1].toString()->ensureLinear(cx);
-         if (!style)
-@@ -456,17 +455,17 @@ js::intl_ComputeDisplayNames(JSContext* 
- }
- 
- bool
- js::intl_GetLocaleInfo(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 1);
- 
--    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     RootedObject info(cx, NewBuiltinClassInstance<PlainObject>(cx));
-     if (!info)
-         return false;
- 
-     if (!DefineDataProperty(cx, info, cx->names().locale, args[0]))
-diff --git a/js/src/builtin/intl/NumberFormat.cpp b/js/src/builtin/intl/NumberFormat.cpp
---- a/js/src/builtin/intl/NumberFormat.cpp
-+++ b/js/src/builtin/intl/NumberFormat.cpp
-@@ -209,17 +209,17 @@ js::intl_NumberFormat_availableLocales(J
- 
- bool
- js::intl_numberingSystem(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 1);
-     MOZ_ASSERT(args[0].isString());
- 
--    UniqueChars locale = JS_EncodeString(cx, args[0].toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, args[0].toString());
-     if (!locale)
-         return false;
- 
-     UErrorCode status = U_ZERO_ERROR;
-     UNumberingSystem* numbers = unumsys_open(IcuLocale(locale.get()), &status);
-     if (U_FAILURE(status)) {
-         intl::ReportInternalError(cx);
-         return false;
-@@ -251,17 +251,17 @@ NewUNumberFormat(JSContext* cx, Handle<N
-     RootedValue value(cx);
- 
-     RootedObject internals(cx, intl::GetInternalsObject(cx, numberFormat));
-     if (!internals)
-        return nullptr;
- 
-     if (!GetProperty(cx, internals, internals, cx->names().locale, &value))
-         return nullptr;
--    UniqueChars locale = JS_EncodeString(cx, value.toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, value.toString());
-     if (!locale)
-         return nullptr;
- 
-     // UNumberFormat options with default values
-     UNumberFormatStyle uStyle = UNUM_DECIMAL;
-     const UChar* uCurrency = nullptr;
-     uint32_t uMinimumIntegerDigits = 1;
-     uint32_t uMinimumFractionDigits = 0;
-diff --git a/js/src/builtin/intl/PluralRules.cpp b/js/src/builtin/intl/PluralRules.cpp
---- a/js/src/builtin/intl/PluralRules.cpp
-+++ b/js/src/builtin/intl/PluralRules.cpp
-@@ -191,17 +191,17 @@ NewUNumberFormatForPluralRules(JSContext
-     RootedObject internals(cx, intl::GetInternalsObject(cx, pluralRules));
-     if (!internals)
-        return nullptr;
- 
-     RootedValue value(cx);
- 
-     if (!GetProperty(cx, internals, internals, cx->names().locale, &value))
-         return nullptr;
--    UniqueChars locale = JS_EncodeString(cx, value.toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, value.toString());
-     if (!locale)
-         return nullptr;
- 
-     uint32_t uMinimumIntegerDigits = 1;
-     uint32_t uMinimumFractionDigits = 0;
-     uint32_t uMaximumFractionDigits = 3;
-     int32_t uMinimumSignificantDigits = -1;
-     int32_t uMaximumSignificantDigits = -1;
-@@ -264,17 +264,17 @@ NewUPluralRules(JSContext* cx, Handle<Pl
-     RootedObject internals(cx, intl::GetInternalsObject(cx, pluralRules));
-     if (!internals)
-         return nullptr;
- 
-     RootedValue value(cx);
- 
-     if (!GetProperty(cx, internals, internals, cx->names().locale, &value))
-         return nullptr;
--    UniqueChars locale = JS_EncodeString(cx, value.toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, value.toString());
-     if (!locale)
-         return nullptr;
- 
-     if (!GetProperty(cx, internals, internals, cx->names().type, &value))
-         return nullptr;
- 
-     UPluralType category;
-     {
-diff --git a/js/src/builtin/intl/RelativeTimeFormat.cpp b/js/src/builtin/intl/RelativeTimeFormat.cpp
---- a/js/src/builtin/intl/RelativeTimeFormat.cpp
-+++ b/js/src/builtin/intl/RelativeTimeFormat.cpp
-@@ -219,17 +219,17 @@ NewURelativeDateTimeFormatter(JSContext*
-     RootedObject internals(cx, intl::GetInternalsObject(cx, relativeTimeFormat));
-     if (!internals)
-         return nullptr;
- 
-     RootedValue value(cx);
- 
-     if (!GetProperty(cx, internals, internals, cx->names().locale, &value))
-         return nullptr;
--    UniqueChars locale = JS_EncodeString(cx, value.toString());
-+    UniqueChars locale = intl::EncodeLocale(cx, value.toString());
-     if (!locale)
-         return nullptr;
- 
-     if (!GetProperty(cx, internals, internals, cx->names().style, &value))
-         return nullptr;
- 
-     UDateRelativeDateTimeFormatterStyle relDateTimeStyle;
-     {
-diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
---- a/js/src/jsapi.cpp
-+++ b/js/src/jsapi.cpp
-@@ -175,17 +175,17 @@ JS::ObjectOpResult::reportStrictErrorOrW
-     }
- 
-     if (ErrorTakesArguments(code_)) {
-         RootedValue idv(cx, IdToValue(id));
-         RootedString str(cx, ValueToSource(cx, idv));
-         if (!str)
-             return false;
- 
--        UniqueChars propName = JS_EncodeStringToUTF8(cx, str);
-+        UniqueChars propName = StringToNewUTF8CharsZ(cx, *str);
-         if (!propName)
-             return false;
- 
-         if (code_ == JSMSG_SET_NON_OBJECT_RECEIVER) {
-             // We know that the original receiver was a primitive, so unbox it.
-             RootedValue val(cx, ObjectValue(*obj));
-             if (!obj->is<ProxyObject>()) {
-                 if (!Unbox(cx, obj, &val))
-diff --git a/js/src/jsexn.cpp b/js/src/jsexn.cpp
---- a/js/src/jsexn.cpp
-+++ b/js/src/jsexn.cpp
-@@ -1089,25 +1089,25 @@ js::ValueToSourceForError(JSContext* cx,
-     } else if (val.isNumber()) {
-         if (!sb.append("the number "))
-             return "<<error converting value to string>>";
-     } else if (val.isString()) {
-         if (!sb.append("the string "))
-             return "<<error converting value to string>>";
-     } else {
-         MOZ_ASSERT(val.isBoolean() || val.isSymbol());
--        bytes = JS_EncodeString(cx, str);
-+        bytes = EncodeLatin1(cx, str);
-         return bytes.get();
-     }
-     if (!sb.append(str))
-         return "<<error converting value to string>>";
-     str = sb.finishString();
-     if (!str)
-         return "<<error converting value to string>>";
--    bytes = JS_EncodeString(cx, str);
-+    bytes = EncodeLatin1(cx, str);
-     return bytes.get();
- }
- 
- bool
- js::GetInternalError(JSContext* cx, unsigned errorNumber, MutableHandleValue error)
- {
-     FixedInvokeArgs<1> args(cx);
-     args[0].set(Int32Value(errorNumber));
-diff --git a/js/src/proxy/ScriptedProxyHandler.cpp b/js/src/proxy/ScriptedProxyHandler.cpp
---- a/js/src/proxy/ScriptedProxyHandler.cpp
-+++ b/js/src/proxy/ScriptedProxyHandler.cpp
-@@ -174,17 +174,17 @@ GetProxyTrap(JSContext* cx, HandleObject
- 
-     if (func.isNull()) {
-         func.setUndefined();
-         return true;
-     }
- 
-     // Step 4.
-     if (!IsCallable(func)) {
--        UniqueChars bytes = JS_EncodeString(cx, name);
-+        UniqueChars bytes = EncodeLatin1(cx, name);
-         if (!bytes)
-             return false;
- 
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_BAD_TRAP, bytes.get());
-         return false;
-     }
- 
-     return true;
-diff --git a/js/src/vm/BytecodeUtil.cpp b/js/src/vm/BytecodeUtil.cpp
---- a/js/src/vm/BytecodeUtil.cpp
-+++ b/js/src/vm/BytecodeUtil.cpp
-@@ -1160,24 +1160,24 @@ ToDisassemblySource(JSContext* cx, Handl
-     if (v.isObject()) {
-         JSObject& obj = v.toObject();
- 
-         if (obj.is<JSFunction>()) {
-             RootedFunction fun(cx, &obj.as<JSFunction>());
-             JSString* str = JS_DecompileFunction(cx, fun);
-             if (!str)
-                 return nullptr;
--            return JS_EncodeString(cx, str);
-+            return EncodeLatin1(cx, str);
-         }
- 
-         if (obj.is<RegExpObject>()) {
-             JSString* source = obj.as<RegExpObject>().toString(cx);
-             if (!source)
-                 return nullptr;
--            return JS_EncodeString(cx, source);
-+            return EncodeLatin1(cx, source);
-         }
-     }
- 
-     return ValueToPrintableLatin1(cx, v, true);
- }
- 
- static bool
- ToDisassemblySource(JSContext* cx, HandleScope scope, UniqueChars* bytes)
-@@ -2309,17 +2309,17 @@ js::DecompileValueGenerator(JSContext* c
-     if (!fallback) {
-         if (v.isUndefined())
-             return DuplicateString(cx, js_undefined_str); // Prevent users from seeing "(void 0)"
-         fallback = ValueToSource(cx, v);
-         if (!fallback)
-             return nullptr;
-     }
- 
--    return JS_EncodeString(cx, fallback);
-+    return EncodeLatin1(cx, fallback);
- }
- 
- static bool
- DecompileArgumentFromStack(JSContext* cx, int formalIndex, UniqueChars* res)
- {
-     MOZ_ASSERT(formalIndex >= 0);
- 
-     *res = nullptr;
-@@ -2399,17 +2399,17 @@ js::DecompileArgument(JSContext* cx, int
-     }
-     if (v.isUndefined())
-         return DuplicateString(cx, js_undefined_str); // Prevent users from seeing "(void 0)"
- 
-     RootedString fallback(cx, ValueToSource(cx, v));
-     if (!fallback)
-         return nullptr;
- 
--    return JS_EncodeString(cx, fallback);
-+    return EncodeLatin1(cx, fallback);
- }
- 
- extern bool
- js::IsValidBytecodeOffset(JSContext* cx, JSScript* script, size_t offset)
- {
-     // This could be faster (by following jump instructions if the target is <= offset).
-     for (BytecodeRange r(cx, script); !r.empty(); r.popFront()) {
-         size_t here = r.frontOffset();
-diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
---- a/js/src/vm/Interpreter.cpp
-+++ b/js/src/vm/Interpreter.cpp
-@@ -1856,17 +1856,17 @@ js::ReportInNotObjectError(JSContext* cx
-             if (!buf.appendSubstring(str, 0, MaxStringLength))
-                 return nullptr;
-             if (!buf.append("..."))
-                 return nullptr;
-             str = buf.finishString();
-             if (!str)
-                 return nullptr;
-         }
--        return JS_EncodeString(cx, str);
-+        return EncodeLatin1(cx, str);
-     };
- 
-     if (lref.isString() && rref.isString()) {
-         UniqueChars lbytes = uniqueCharsFromString(cx, lref);
-         if (!lbytes)
-             return;
-         UniqueChars rbytes = uniqueCharsFromString(cx, rref);
-         if (!rbytes)
-diff --git a/js/src/vm/JSFunction-inl.h b/js/src/vm/JSFunction-inl.h
---- a/js/src/vm/JSFunction-inl.h
-+++ b/js/src/vm/JSFunction-inl.h
-@@ -17,17 +17,17 @@
- #include "vm/JSObject-inl.h"
- 
- namespace js {
- 
- inline const char*
- GetFunctionNameBytes(JSContext* cx, JSFunction* fun, UniqueChars* bytes)
- {
-     if (JSAtom* name = fun->explicitName()) {
--        *bytes = JS_EncodeString(cx, name);
-+        *bytes = EncodeLatin1(cx, name);
-         return bytes->get();
-     }
-     return js_anonymous_str;
- }
- 
- inline bool
- CanReuseFunctionForClone(JSContext* cx, HandleFunction fun)
- {
-diff --git a/js/src/vm/JSObject.cpp b/js/src/vm/JSObject.cpp
---- a/js/src/vm/JSObject.cpp
-+++ b/js/src/vm/JSObject.cpp
-@@ -256,17 +256,17 @@ bool
- js::Throw(JSContext* cx, jsid id, unsigned errorNumber, const char* details)
- {
-     MOZ_ASSERT(js_ErrorFormatString[errorNumber].argCount == (details ? 2 : 1));
- 
-     RootedValue idVal(cx, IdToValue(id));
-     JSString* idstr = ValueToSource(cx, idVal);
-     if (!idstr)
-        return false;
--    UniqueChars bytes = JS_EncodeString(cx, idstr);
-+    UniqueChars bytes = EncodeLatin1(cx, idstr);
-     if (!bytes)
-         return false;
- 
-     if (details) {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber, bytes.get(),
-                                    details);
-     } else {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber, bytes.get());
-diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp
---- a/js/src/vm/NativeObject.cpp
-+++ b/js/src/vm/NativeObject.cpp
-@@ -2470,17 +2470,17 @@ MaybeReportUndeclaredVarAssignment(JSCon
-         if (IsStrictSetPC(pc))
-             flags = JSREPORT_ERROR;
-         else if (cx->realm()->behaviors().extraWarnings(cx))
-             flags = JSREPORT_WARNING | JSREPORT_STRICT;
-         else
-             return true;
-     }
- 
--    UniqueChars bytes = JS_EncodeStringToUTF8(cx, propname);
-+    UniqueChars bytes = StringToNewUTF8CharsZ(cx, *propname);
-     if (!bytes)
-         return false;
-     return JS_ReportErrorFlagsAndNumberUTF8(cx, flags, GetErrorMessage, nullptr,
-                                             JSMSG_UNDECLARED_VAR, bytes.get());
- }
- 
- /*
-  * Finish assignment to a shapeful data property of a native object obj. This
-diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
---- a/js/src/vm/SelfHosting.cpp
-+++ b/js/src/vm/SelfHosting.cpp
-@@ -294,19 +294,19 @@ ThrowErrorWithType(JSContext* cx, JSExnT
- 
-     UniqueChars errorArgs[3];
-     for (unsigned i = 1; i < 4 && i < args.length(); i++) {
-         RootedValue val(cx, args[i]);
-         if (val.isInt32()) {
-             JSString* str = ToString<CanGC>(cx, val);
-             if (!str)
-                 return;
--            errorArgs[i - 1] = JS_EncodeString(cx, str);
-+            errorArgs[i - 1] = EncodeLatin1(cx, str);
-         } else if (val.isString()) {
--            errorArgs[i - 1] = JS_EncodeString(cx, val.toString());
-+            errorArgs[i - 1] = EncodeLatin1(cx, val.toString());
-         } else {
-             errorArgs[i - 1] = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, val, nullptr);
-         }
-         if (!errorArgs[i - 1])
-             return;
-     }
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber,
-diff --git a/js/src/vm/StringType.cpp b/js/src/vm/StringType.cpp
---- a/js/src/vm/StringType.cpp
-+++ b/js/src/vm/StringType.cpp
-@@ -2071,31 +2071,31 @@ js::ValueToPrintableLatin1(JSContext* cx
-         str = ValueToSource(cx, v);
-     else
-         str = ToString<CanGC>(cx, v);
-     if (!str)
-         return nullptr;
-     str = QuoteString(cx, str, 0);
-     if (!str)
-         return nullptr;
--    return JS_EncodeString(cx, str);
-+    return EncodeLatin1(cx, str);
- }
- 
- UniqueChars
- js::ValueToPrintableUTF8(JSContext* cx, const Value& vArg, bool asSource)
- {
-     RootedValue v(cx, vArg);
-     RootedString str(cx);
-     if (asSource)
-         str.set(ValueToSource(cx, v));
-     else
-         str.set(ToString<CanGC>(cx, v));
-     if (!str)
-         return nullptr;
--    return JS_EncodeStringToUTF8(cx, str);
-+    return StringToNewUTF8CharsZ(cx, *str);
- }
- 
- template <AllowGC allowGC>
- JSString*
- js::ToStringSlow(JSContext* cx, typename MaybeRooted<Value, allowGC>::HandleType arg)
- {
-     /* As with ToObjectSlow, callers must verify that |arg| isn't a string. */
-     MOZ_ASSERT(!arg.isString());

+ 0 - 548
frg/work-js/mozilla-release/patches/mozilla-central_435004.patch

@@ -1,548 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536135910 25200
-#      Wed Sep 05 01:25:10 2018 -0700
-# Node ID b19d4e73e016439dc5446f2bb17a34116086f5ee
-# Parent  21181aea32fa3d7f72ad96dc521c36a37eb2ee58
-Bug 1485066 - Part 7: Miscellaneous clean-up for engine internal EncodeString callers. r=Waldo
-
-diff --git a/js/src/builtin/TypedObject.cpp b/js/src/builtin/TypedObject.cpp
---- a/js/src/builtin/TypedObject.cpp
-+++ b/js/src/builtin/TypedObject.cpp
-@@ -1696,22 +1696,17 @@ TypedObject::obj_lookupProperty(JSContex
-     return LookupProperty(cx, proto, id, objp, propp);
- }
- 
- static bool
- ReportPropertyError(JSContext* cx,
-                     const unsigned errorNumber,
-                     HandleId id)
- {
--    RootedValue idVal(cx, IdToValue(id));
--    RootedString str(cx, ValueToSource(cx, idVal));
--    if (!str)
--        return false;
--
--    UniqueChars propName = StringToNewUTF8CharsZ(cx, *str);
-+    UniqueChars propName = ValueToPrintableUTF8(cx, IdToValue(id), true);
-     if (!propName)
-         return false;
- 
-     JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, errorNumber, propName.get());
-     return false;
- }
- 
- bool
-diff --git a/js/src/jit-test/tests/self-test/readlineBuf.js b/js/src/jit-test/tests/self-test/readlineBuf.js
---- a/js/src/jit-test/tests/self-test/readlineBuf.js
-+++ b/js/src/jit-test/tests/self-test/readlineBuf.js
-@@ -4,31 +4,33 @@ assertThrowsInstanceOf(function () { rea
- 
- var testBuffers = [
-     "foo\nbar\nbaz\n",
-     "foo\nbar\nbaz",
-     "foo\n\nbar\nbaz",
-     "f",
-     "\n",
-     "\nf",
--    ""
-+    "",
-+    "Ää\n\u{10ffff}",
- ];
- 
- var expected = [
-     [ "foo", "bar", "baz" ],
-     [ "foo", "bar", "baz" ],
-     [ "foo", "", "bar", "baz" ],
-     [ "f" ],
-     [ "" ],
-     [ "", "f" ],
--    []
-+    [],
-+    ["Ää", "\u{10ffff}"],
- ];
- 
--for (var idx in testBuffers) {
--    readlineBuf(testBuffers[idx]);
-+for (var [idx, testValue] of testBuffers.entries()) {
-+    readlineBuf(testValue);
-     var result = [];
- 
-     while ((line = readlineBuf()) != null) {
-         result.push(line);
-     }
- 
-     assertDeepEq(result, expected[idx]);
- }
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -1171,18 +1171,17 @@ EvalAndPrint(JSContext* cx, const char* 
-     if (compileOnly)
-         return true;
-     RootedValue result(cx);
-     if (!JS_ExecuteScript(cx, script, &result))
-         return false;
- 
-     if (!result.isUndefined() && gOutFile->isOpen()) {
-         // Print.
--        RootedString str(cx);
--        str = JS_ValueToSource(cx, result);
-+        RootedString str(cx, JS_ValueToSource(cx, result));
-         if (!str)
-             return false;
- 
-         UniqueChars utf8chars = JS_EncodeStringToUTF8(cx, str);
-         if (!utf8chars)
-             return false;
-         fprintf(gOutFile->fp, "%s\n", utf8chars.get());
-     }
-@@ -2322,41 +2321,41 @@ ReadLineBuf(JSContext* cx, unsigned argc
- 
-         size_t len = 0;
-         while(len < buflen) {
-             if (currentBuf[len] == '\n')
-                 break;
-             len++;
-         }
- 
--        JSString* str = JS_NewStringCopyN(cx, currentBuf, len);
-+        JSString* str = JS_NewStringCopyUTF8N(cx, JS::UTF8Chars(currentBuf, len));
-         if (!str)
-             return false;
- 
-         if (currentBuf[len] == '\0')
-             sc->readLineBufPos += len;
-         else
-             sc->readLineBufPos += len + 1;
- 
-         args.rval().setString(str);
-         return true;
-     }
- 
-     if (args.length() == 1) {
--        if (sc->readLineBuf)
--            sc->readLineBuf.reset();
-+        sc->readLineBuf = nullptr;
-+        sc->readLineBufPos = 0;
- 
-         RootedString str(cx, JS::ToString(cx, args[0]));
-         if (!str)
-             return false;
-         sc->readLineBuf = JS_EncodeStringToUTF8(cx, str);
-         if (!sc->readLineBuf)
-             return false;
- 
--        sc->readLineBufPos = 0;
-+        args.rval().setUndefined();
-         return true;
-     }
- 
-     JS_ReportErrorASCII(cx, "Must specify at most one argument");
-     return false;
- }
- 
- static bool
-@@ -2507,22 +2506,21 @@ StopTimingMutator(JSContext* cx, unsigne
-                 mutator_ms, mutator_ms / total_ms * 100.0, gc_ms, gc_ms / total_ms * 100.0);
-     }
- 
-     args.rval().setUndefined();
-     return true;
- }
- 
- static const char*
--ToSource(JSContext* cx, MutableHandleValue vp, UniqueChars* bytes)
--{
--    JSString* str = JS_ValueToSource(cx, vp);
-+ToSource(JSContext* cx, HandleValue vp, UniqueChars* bytes)
-+{
-+    RootedString str(cx, JS_ValueToSource(cx, vp));
-     if (str) {
--        vp.setString(str);
--        *bytes = JS_EncodeString(cx, str);
-+        *bytes = JS_EncodeStringToUTF8(cx, str);
-         if (*bytes)
-             return bytes->get();
-     }
-     JS_ClearPendingException(cx);
-     return "<<error converting value to string>>";
- }
- 
- static bool
-@@ -2543,25 +2541,25 @@ AssertEq(JSContext* cx, unsigned argc, V
-     bool same;
-     if (!JS_SameValue(cx, args[0], args[1], &same))
-         return false;
-     if (!same) {
-         UniqueChars bytes0, bytes1;
-         const char* actual = ToSource(cx, args[0], &bytes0);
-         const char* expected = ToSource(cx, args[1], &bytes1);
-         if (args.length() == 2) {
--            JS_ReportErrorNumberLatin1(cx, my_GetErrorMessage, nullptr, JSSMSG_ASSERT_EQ_FAILED,
--                                       actual, expected);
-+            JS_ReportErrorNumberUTF8(cx, my_GetErrorMessage, nullptr, JSSMSG_ASSERT_EQ_FAILED,
-+                                     actual, expected);
-         } else {
--            UniqueChars bytes2 = JS_EncodeString(cx, args[2].toString());
-+            RootedString message(cx, args[2].toString());
-+            UniqueChars bytes2 = JS_EncodeStringToUTF8(cx, message);
-             if (!bytes2)
-                 return false;
--            JS_ReportErrorNumberLatin1(cx, my_GetErrorMessage, nullptr,
--                                       JSSMSG_ASSERT_EQ_FAILED_MSG,
--                                       actual, expected, bytes2.get());
-+            JS_ReportErrorNumberUTF8(cx, my_GetErrorMessage, nullptr, JSSMSG_ASSERT_EQ_FAILED_MSG,
-+                                     actual, expected, bytes2.get());
-         }
-         return false;
-     }
-     args.rval().setUndefined();
-     return true;
- }
- 
- static JSScript*
-@@ -3169,21 +3167,20 @@ DisassFile(JSContext* cx, unsigned argc,
- 
-         if (!JS::Compile(cx, options, filename.get(), &script))
-             return false;
-     }
- 
-     Sprinter sprinter(cx);
-     if (!sprinter.init())
-         return false;
--    bool ok = DisassembleScript(cx, script, nullptr, p.lines, p.recursive, p.sourceNotes, &sprinter);
--    if (ok)
--        fprintf(gOutFile->fp, "%s\n", sprinter.string());
--    if (!ok)
--        return false;
-+    if (!DisassembleScript(cx, script, nullptr, p.lines, p.recursive, p.sourceNotes, &sprinter))
-+        return false;
-+
-+    fprintf(gOutFile->fp, "%s\n", sprinter.string());
- 
-     args.rval().setUndefined();
-     return true;
- }
- 
- static bool
- DisassWithSrc(JSContext* cx, unsigned argc, Value* vp)
- {
-diff --git a/js/src/vm/BytecodeUtil.cpp b/js/src/vm/BytecodeUtil.cpp
---- a/js/src/vm/BytecodeUtil.cpp
-+++ b/js/src/vm/BytecodeUtil.cpp
-@@ -2364,34 +2364,30 @@ DecompileArgumentFromStack(JSContext* cx
-         return false;
-     if (!ed.decompilePCForStackOperand(current, formalStackIndex))
-         return false;
- 
-     *res = ed.getOutput();
-     return *res != nullptr;
- }
- 
--UniqueChars
-+JSString*
- js::DecompileArgument(JSContext* cx, int formalIndex, HandleValue v)
- {
-     {
-         UniqueChars result;
-         if (!DecompileArgumentFromStack(cx, formalIndex, &result))
-             return nullptr;
-         if (result && strcmp(result.get(), "(intermediate value)"))
--            return result;
-+            return NewStringCopyZ<CanGC>(cx, result.get());
-     }
-     if (v.isUndefined())
--        return DuplicateString(cx, js_undefined_str); // Prevent users from seeing "(void 0)"
--
--    RootedString fallback(cx, ValueToSource(cx, v));
--    if (!fallback)
--        return nullptr;
--
--    return EncodeLatin1(cx, fallback);
-+        return cx->names().undefined; // Prevent users from seeing "(void 0)"
-+
-+    return ValueToSource(cx, v);
- }
- 
- extern bool
- js::IsValidBytecodeOffset(JSContext* cx, JSScript* script, size_t offset)
- {
-     // This could be faster (by following jump instructions if the target is <= offset).
-     for (BytecodeRange r(cx, script); !r.empty(); r.popFront()) {
-         size_t here = r.frontOffset();
-diff --git a/js/src/vm/BytecodeUtil.h b/js/src/vm/BytecodeUtil.h
---- a/js/src/vm/BytecodeUtil.h
-+++ b/js/src/vm/BytecodeUtil.h
-@@ -527,17 +527,17 @@ GetVariableBytecodeLength(jsbytecode* pc
- UniqueChars
- DecompileValueGenerator(JSContext* cx, int spindex, HandleValue v,
-                         HandleString fallback, int skipStackHits = 0);
- 
- /*
-  * Decompile the formal argument at formalIndex in the nearest non-builtin
-  * stack frame, falling back with converting v to source.
-  */
--UniqueChars
-+JSString*
- DecompileArgument(JSContext* cx, int formalIndex, HandleValue v);
- 
- static inline unsigned
- GetBytecodeLength(jsbytecode* pc)
- {
-     JSOp op = (JSOp)*pc;
-     MOZ_ASSERT(op < JSOP_LIMIT);
- 
-diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
---- a/js/src/vm/Interpreter.cpp
-+++ b/js/src/vm/Interpreter.cpp
-@@ -1856,28 +1856,28 @@ js::ReportInNotObjectError(JSContext* cx
-             if (!buf.appendSubstring(str, 0, MaxStringLength))
-                 return nullptr;
-             if (!buf.append("..."))
-                 return nullptr;
-             str = buf.finishString();
-             if (!str)
-                 return nullptr;
-         }
--        return EncodeLatin1(cx, str);
-+        return StringToNewUTF8CharsZ(cx, *str);
-     };
- 
-     if (lref.isString() && rref.isString()) {
-         UniqueChars lbytes = uniqueCharsFromString(cx, lref);
-         if (!lbytes)
-             return;
-         UniqueChars rbytes = uniqueCharsFromString(cx, rref);
-         if (!rbytes)
-             return;
--        JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_IN_STRING,
--                                   lbytes.get(), rbytes.get());
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_IN_STRING,
-+                                 lbytes.get(), rbytes.get());
-         return;
-     }
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_IN_NOT_OBJECT,
-                                InformalValueTypeName(rref));
- }
- 
- static MOZ_NEVER_INLINE bool
-diff --git a/js/src/vm/JSObject.cpp b/js/src/vm/JSObject.cpp
---- a/js/src/vm/JSObject.cpp
-+++ b/js/src/vm/JSObject.cpp
-@@ -251,16 +251,17 @@ GetPropertyIfPresent(JSContext* cx, Hand
- 
-     return GetProperty(cx, obj, obj, id, vp);
- }
- 
- bool
- js::Throw(JSContext* cx, jsid id, unsigned errorNumber, const char* details)
- {
-     MOZ_ASSERT(js_ErrorFormatString[errorNumber].argCount == (details ? 2 : 1));
-+    MOZ_ASSERT_IF(details, JS::StringIsASCII(details));
- 
-     RootedValue idVal(cx, IdToValue(id));
-     JSString* idstr = ValueToSource(cx, idVal);
-     if (!idstr)
-        return false;
-     UniqueChars bytes = EncodeLatin1(cx, idstr);
-     if (!bytes)
-         return false;
-diff --git a/js/src/vm/Printer.cpp b/js/src/vm/Printer.cpp
---- a/js/src/vm/Printer.cpp
-+++ b/js/src/vm/Printer.cpp
-@@ -94,17 +94,17 @@ Sprinter::realloc_(size_t newSize)
-     MOZ_ASSERT(newSize > (size_t) offset);
-     char* newBuf = (char*) js_realloc(base, newSize);
-     if (!newBuf) {
-         reportOutOfMemory();
-         return false;
-     }
-     base = newBuf;
-     size = newSize;
--    base[size - 1] = 0;
-+    base[size - 1] = '\0';
-     return true;
- }
- 
- Sprinter::Sprinter(JSContext* cx, bool shouldReportOOM)
-   : context(cx),
- #ifdef DEBUG
-     initialized(false),
- #endif
-@@ -128,28 +128,28 @@ Sprinter::init()
-     base = js_pod_malloc<char>(DefaultSize);
-     if (!base) {
-         reportOutOfMemory();
-         return false;
-     }
- #ifdef DEBUG
-     initialized = true;
- #endif
--    *base = 0;
-+    *base = '\0';
-     size = DefaultSize;
--    base[size - 1] = 0;
-+    base[size - 1] = '\0';
-     return true;
- }
- 
- void
- Sprinter::checkInvariants() const
- {
-     MOZ_ASSERT(initialized);
-     MOZ_ASSERT((size_t) offset < size);
--    MOZ_ASSERT(base[size - 1] == 0);
-+    MOZ_ASSERT(base[size - 1] == '\0');
- }
- 
- UniqueChars
- Sprinter::release()
- {
-     checkInvariants();
-     if (hadOOM_)
-         return nullptr;
-@@ -209,17 +209,17 @@ Sprinter::put(const char* s, size_t len)
-         /* buffer was realloc'ed */
-         if (base != oldBase)
-             s = stringAt(s - oldBase);  /* this is where it lives now */
-         memmove(bp, s, len);
-     } else {
-         js_memcpy(bp, s, len);
-     }
- 
--    bp[len] = 0;
-+    bp[len] = '\0';
-     return true;
- }
- 
- bool
- Sprinter::putString(JSString* s)
- {
-     InvariantChecker ic(this);
- 
-@@ -237,17 +237,17 @@ Sprinter::putString(JSString* s)
-     if (linear->hasLatin1Chars()) {
-         PodCopy(reinterpret_cast<Latin1Char*>(buffer), linear->latin1Chars(nogc), length);
-     } else {
-         const char16_t* src = linear->twoByteChars(nogc);
-         for (size_t i = 0; i < length; i++)
-             buffer[i] = char(src[i]);
-     }
- 
--    buffer[length] = 0;
-+    buffer[length] = '\0';
-     return true;
- }
- 
- ptrdiff_t
- Sprinter::getOffset() const
- {
-     return offset;
- }
-@@ -315,17 +315,17 @@ QuoteString(Sprinter* sp, const mozilla:
-         {
-             ptrdiff_t len = t - s;
-             ptrdiff_t base = sp->getOffset();
-             if (!sp->reserve(len))
-                 return false;
- 
-             for (ptrdiff_t i = 0; i < len; ++i)
-                 (*sp)[base + i] = char(s[i]);
--            (*sp)[base + len] = 0;
-+            (*sp)[base + len] = '\0';
-         }
- 
-         if (t == end)
-             break;
- 
-         /* Use js_EscapeMap, \u, or \x only if necessary. */
-         const char* escape;
-         if (!(c >> 8) && c != 0 && (escape = strchr(js_EscapeMap, int(c))) != nullptr) {
-@@ -347,30 +347,30 @@ QuoteString(Sprinter* sp, const mozilla:
-         if (!sp->putChar(quote))
-             return false;
-     }
- 
-     return true;
- }
- 
- bool
--QuoteString(Sprinter* sp, JSString* str, char quote/* = 0*/)
-+QuoteString(Sprinter* sp, JSString* str, char quote /*= '\0' */)
- {
-     JSLinearString* linear = str->ensureLinear(sp->context);
-     if (!linear)
-         return false;
- 
-     JS::AutoCheckCannotGC nogc;
-     return linear->hasLatin1Chars()
-            ? QuoteString(sp, linear->latin1Range(nogc), quote)
-            : QuoteString(sp, linear->twoByteRange(nogc), quote);
- }
- 
- UniqueChars
--QuoteString(JSContext* cx, JSString* str, char quote/* = 0*/)
-+QuoteString(JSContext* cx, JSString* str, char quote /* = '\0' */)
- {
-     Sprinter sprinter(cx);
-     if (!sprinter.init())
-         return nullptr;
-     if (!QuoteString(&sprinter, str, quote))
-         return nullptr;
-     return sprinter.release();
- }
-diff --git a/js/src/vm/Printer.h b/js/src/vm/Printer.h
---- a/js/src/vm/Printer.h
-+++ b/js/src/vm/Printer.h
-@@ -213,18 +213,18 @@ class LSprinter final : public GenericPr
- extern const char       js_EscapeMap[];
- 
- // Return a C-string containing the chars in str, with any non-printing chars
- // escaped. If the optional quote parameter is present and is not '\0', quotes
- // (as specified by the quote argument) are also escaped, and the quote
- // character is appended at the beginning and end of the result string.
- // The returned string is guaranteed to contain only ASCII characters.
- extern JS::UniqueChars
--QuoteString(JSContext* cx, JSString* str, char quote = 0);
-+QuoteString(JSContext* cx, JSString* str, char quote = '\0');
- 
- // Appends the quoted string to the given Sprinter. Follows the same semantics
- // as QuoteString from above.
- extern bool
--QuoteString(Sprinter* sp, JSString* str, char quote = 0);
-+QuoteString(Sprinter* sp, JSString* str, char quote = '\0');
- 
- } // namespace js
- 
- #endif // vm_Printer_h
-diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
---- a/js/src/vm/SelfHosting.cpp
-+++ b/js/src/vm/SelfHosting.cpp
-@@ -520,23 +520,20 @@ intrinsic_FinishBoundFunctionInit(JSCont
-  */
- static bool
- intrinsic_DecompileArg(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     MOZ_ASSERT(args.length() == 2);
- 
-     HandleValue value = args[1];
--    UniqueChars str = DecompileArgument(cx, args[0].toInt32(), value);
-+    JSString* str = DecompileArgument(cx, args[0].toInt32(), value);
-     if (!str)
-         return false;
--    JSString* result = NewStringCopyZ<CanGC>(cx, str.get());
--    if (!result)
--        return false;
--    args.rval().setString(result);
-+    args.rval().setString(str);
-     return true;
- }
- 
- static bool
- intrinsic_DefineDataProperty(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
- 

+ 0 - 444
frg/work-js/mozilla-release/patches/mozilla-central_435006.patch

@@ -1,444 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536135911 25200
-#      Wed Sep 05 01:25:11 2018 -0700
-# Node ID aa11c398f118ceee4bc586e896b4132186c692b6
-# Parent  9f5767f1b04cb1924e94e530acec5738edfb3e52
-Bug 1485066 - Part 9: Additional miscellaneous clean-ups around EncodeString callers. r=Waldo
-
-diff --git a/js/public/Proxy.h b/js/public/Proxy.h
---- a/js/public/Proxy.h
-+++ b/js/public/Proxy.h
-@@ -620,17 +620,17 @@ class JS_FRIEND_API(AutoEnterPolicy)
-   protected:
-     // no-op constructor for subclass
-     AutoEnterPolicy()
- #ifdef JS_DEBUG
-         : context(nullptr)
-         , enteredAction(BaseProxyHandler::NONE)
- #endif
-         {}
--    void reportErrorIfExceptionIsNotPending(JSContext* cx, jsid id);
-+    void reportErrorIfExceptionIsNotPending(JSContext* cx, HandleId id);
-     bool allow;
-     bool rv;
- 
- #ifdef JS_DEBUG
-     JSContext* context;
-     mozilla::Maybe<HandleObject> enteredProxy;
-     mozilla::Maybe<HandleId> enteredId;
-     Action                   enteredAction;
-diff --git a/js/src/builtin/Object.cpp b/js/src/builtin/Object.cpp
---- a/js/src/builtin/Object.cpp
-+++ b/js/src/builtin/Object.cpp
-@@ -1048,18 +1048,17 @@ js::obj_create(JSContext* cx, unsigned a
-     // Step 1.
-     if (args.length() == 0) {
-         JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_MORE_ARGS_NEEDED,
-                                   "Object.create", "0", "s");
-         return false;
-     }
- 
-     if (!args[0].isObjectOrNull()) {
--        RootedValue v(cx, args[0]);
--        UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, v, nullptr);
-+        UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, args[0], nullptr);
-         if (!bytes)
-             return false;
- 
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_UNEXPECTED_TYPE,
-                                    bytes.get(), "not an object or null");
-         return false;
-     }
- 
-diff --git a/js/src/builtin/TypedObject.cpp b/js/src/builtin/TypedObject.cpp
---- a/js/src/builtin/TypedObject.cpp
-+++ b/js/src/builtin/TypedObject.cpp
-@@ -1587,31 +1587,16 @@ TypedObject::createZeroed(JSContext* cx,
-     buffer = ArrayBufferObject::create(cx, totalSize);
-     if (!buffer)
-         return nullptr;
-     descr->initInstances(cx->runtime(), buffer->dataPointer(), 1);
-     obj->attach(cx, *buffer, 0);
-     return obj;
- }
- 
--static bool
--ReportTypedObjTypeError(JSContext* cx,
--                        const unsigned errorNumber,
--                        HandleTypedObject obj)
--{
--    // Serialize type string of obj
--    RootedAtom typeReprAtom(cx, &obj->typeDescr().stringRepr());
--    UniqueChars typeReprStr = StringToNewUTF8CharsZ(cx, *typeReprAtom);
--    if (!typeReprStr)
--        return false;
--
--    JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, errorNumber, typeReprStr.get());
--    return false;
--}
--
- /* static */ void
- OutlineTypedObject::obj_trace(JSTracer* trc, JSObject* object)
- {
-     OutlineTypedObject& typedObj = object->as<OutlineTypedObject>();
- 
-     TraceEdge(trc, typedObj.shapePtr(), "OutlineTypedObject_shape");
- 
-     if (!typedObj.owner_)
-@@ -1691,36 +1676,30 @@ TypedObject::obj_lookupProperty(JSContex
-         objp.set(nullptr);
-         propp.setNotFound();
-         return true;
-     }
- 
-     return LookupProperty(cx, proto, id, objp, propp);
- }
- 
--static bool
--ReportPropertyError(JSContext* cx,
--                    const unsigned errorNumber,
--                    HandleId id)
--{
--    UniqueChars propName = ValueToPrintableUTF8(cx, IdToValue(id), true);
--    if (!propName)
--        return false;
--
--    JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, errorNumber, propName.get());
--    return false;
--}
--
- bool
- TypedObject::obj_defineProperty(JSContext* cx, HandleObject obj, HandleId id,
-                                 Handle<PropertyDescriptor> desc,
-                                 ObjectOpResult& result)
- {
--    Rooted<TypedObject*> typedObj(cx, &obj->as<TypedObject>());
--    return ReportTypedObjTypeError(cx, JSMSG_OBJECT_NOT_EXTENSIBLE, typedObj);
-+    // Serialize the type string of |obj|.
-+    RootedAtom typeReprAtom(cx, &obj->as<TypedObject>().typeDescr().stringRepr());
-+    UniqueChars typeReprStr = StringToNewUTF8CharsZ(cx, *typeReprAtom);
-+    if (!typeReprStr)
-+        return false;
-+
-+    JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_OBJECT_NOT_EXTENSIBLE,
-+                             typeReprStr.get());
-+    return false;
- }
- 
- bool
- TypedObject::obj_hasProperty(JSContext* cx, HandleObject obj, HandleId id, bool* foundp)
- {
-     Rooted<TypedObject*> typedObj(cx, &obj->as<TypedObject>());
-     switch (typedObj->typeDescr().kind()) {
-       case type::Scalar:
-@@ -2005,18 +1984,24 @@ IsOwnId(JSContext* cx, HandleObject obj,
-     }
- 
-     return false;
- }
- 
- bool
- TypedObject::obj_deleteProperty(JSContext* cx, HandleObject obj, HandleId id, ObjectOpResult& result)
- {
--    if (IsOwnId(cx, obj, id))
--        return ReportPropertyError(cx, JSMSG_CANT_DELETE, id);
-+    if (IsOwnId(cx, obj, id)) {
-+        UniqueChars propName = ValueToPrintableUTF8(cx, IdToValue(id), true);
-+        if (!propName)
-+            return false;
-+
-+        JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_CANT_DELETE, propName.get());
-+        return false;
-+    }
- 
-     RootedObject proto(cx, obj->staticPrototype());
-     if (!proto)
-         return result.succeed();
- 
-     return DeleteProperty(cx, proto, id, result);
- }
- 
-diff --git a/js/src/proxy/Proxy.cpp b/js/src/proxy/Proxy.cpp
---- a/js/src/proxy/Proxy.cpp
-+++ b/js/src/proxy/Proxy.cpp
-@@ -26,17 +26,17 @@
- #include "vm/NativeObject-inl.h"
- 
- using namespace js;
- using namespace js::gc;
- 
- using JS::AutoStableStringChars;
- 
- void
--js::AutoEnterPolicy::reportErrorIfExceptionIsNotPending(JSContext* cx, jsid id)
-+js::AutoEnterPolicy::reportErrorIfExceptionIsNotPending(JSContext* cx, HandleId id)
- {
-     if (JS_IsExceptionPending(cx))
-         return;
- 
-     if (JSID_IS_VOID(id)) {
-         ReportAccessDenied(cx);
-     } else {
-         RootedValue idVal(cx, IdToValue(id));
-diff --git a/js/src/proxy/ScriptedProxyHandler.cpp b/js/src/proxy/ScriptedProxyHandler.cpp
---- a/js/src/proxy/ScriptedProxyHandler.cpp
-+++ b/js/src/proxy/ScriptedProxyHandler.cpp
-@@ -826,18 +826,20 @@ ScriptedProxyHandler::ownPropertyKeys(JS
-         if (!ptr)
-             return js::Throw(cx, targetConfigurableKeys[i], JSMSG_CANT_REPORT_E_AS_NE);
- 
-         // Step 21.b.
-         uncheckedResultKeys.remove(ptr);
-     }
- 
-     // Step 22.
--    if (!uncheckedResultKeys.empty())
--        return js::Throw(cx, uncheckedResultKeys.all().front(), JSMSG_CANT_REPORT_NEW);
-+    if (!uncheckedResultKeys.empty()) {
-+        RootedId id(cx, uncheckedResultKeys.all().front());
-+        return js::Throw(cx, id, JSMSG_CANT_REPORT_NEW);
-+    }
- 
-     // Step 23.
-     return props.appendAll(trapResult);
- }
- 
- // ES8 rev 0c1bd3004329336774cbc90de727cd0cf5f11e93 9.5.10 Proxy.[[Delete]](P)
- bool
- ScriptedProxyHandler::delete_(JSContext* cx, HandleObject proxy, HandleId id,
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -4745,20 +4745,19 @@ BinParse(JSContext* cx, unsigned argc, V
-         RootedValue optionFormat(cx);
-         if (!JS_GetProperty(cx, objOptions, "format", &optionFormat))
-             return false;
- 
-         if (optionFormat.isUndefined()) {
-             // By default, `useMultipart` is `true`.
-             useMultipart = true;
-         } else if (optionFormat.isString()) {
--            RootedString stringFormat(cx);
--            stringFormat = optionFormat.toString();
--            JS::Rooted<JSLinearString*> linearFormat(cx);
--            linearFormat = stringFormat->ensureLinear(cx);
-+            RootedLinearString linearFormat(cx, optionFormat.toString()->ensureLinear(cx));
-+            if (!linearFormat)
-+                return false;
-             if (StringEqualsAscii(linearFormat, "multipart")) {
-                 useMultipart = true;
-             } else if (StringEqualsAscii(linearFormat, "simple")) {
-                 useMultipart = false;
-             } else {
-                 UniqueChars printable = ValueToPrintableUTF8(cx, optionFormat);
-                 JS_ReportErrorUTF8(cx,
-                                    "Unknown value for option `format`, expected 'multipart' or "
-diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp
---- a/js/src/vm/Debugger.cpp
-+++ b/js/src/vm/Debugger.cpp
-@@ -5427,17 +5427,17 @@ Debugger::wrapLazyScript(JSContext* cx, 
- JSObject*
- Debugger::wrapWasmScript(JSContext* cx, Handle<WasmInstanceObject*> wasmInstance)
- {
-     Rooted<DebuggerScriptReferent> referent(cx, wasmInstance.get());
-     return wrapVariantReferent(cx, referent);
- }
- 
- static JSObject*
--DebuggerScript_check(JSContext* cx, const Value& v, const char* fnname)
-+DebuggerScript_check(JSContext* cx, HandleValue v, const char* fnname)
- {
-     JSObject* thisobj = NonNullObject(cx, v);
-     if (!thisobj)
-         return nullptr;
-     if (thisobj->getClass() != &DebuggerScript_class) {
-         JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INCOMPATIBLE_PROTO,
-                                   "Debugger.Script", fnname, thisobj->getClass()->name);
-         return nullptr;
-diff --git a/js/src/vm/JSObject.cpp b/js/src/vm/JSObject.cpp
---- a/js/src/vm/JSObject.cpp
-+++ b/js/src/vm/JSObject.cpp
-@@ -74,25 +74,24 @@
- #include "vm/StringObject-inl.h"
- #include "vm/TypedArrayObject-inl.h"
- #include "vm/UnboxedObject-inl.h"
- 
- using namespace js;
- using namespace js::gc;
- 
- void
--js::ReportNotObject(JSContext* cx, const Value& v)
-+js::ReportNotObject(JSContext* cx, HandleValue v)
- {
-     MOZ_ASSERT(!v.isObject());
- 
--    RootedValue value(cx, v);
--    UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, value, nullptr);
--    if (bytes)
-+    if (UniqueChars bytes = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, v, nullptr)) {
-         JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, JSMSG_NOT_NONNULL_OBJECT,
-                                    bytes.get());
-+    }
- }
- 
- void
- js::ReportNotObjectArg(JSContext* cx, const char* nth, const char* fun, HandleValue v)
- {
-     MOZ_ASSERT(!v.isObject());
- 
-     UniqueChars bytes;
-@@ -248,17 +247,17 @@ GetPropertyIfPresent(JSContext* cx, Hand
-         vp.setUndefined();
-         return true;
-     }
- 
-     return GetProperty(cx, obj, obj, id, vp);
- }
- 
- bool
--js::Throw(JSContext* cx, jsid id, unsigned errorNumber, const char* details)
-+js::Throw(JSContext* cx, HandleId id, unsigned errorNumber, const char* details)
- {
-     MOZ_ASSERT(js_ErrorFormatString[errorNumber].argCount == (details ? 2 : 1));
-     MOZ_ASSERT_IF(details, JS::StringIsASCII(details));
- 
-     RootedValue idVal(cx, IdToValue(id));
-     JSString* idstr = ValueToSource(cx, idVal);
-     if (!idstr)
-        return false;
-diff --git a/js/src/vm/JSObject.h b/js/src/vm/JSObject.h
---- a/js/src/vm/JSObject.h
-+++ b/js/src/vm/JSObject.h
-@@ -1236,20 +1236,20 @@ template<XDRMode mode>
- XDRResult
- XDRObjectLiteral(XDRState<mode>* xdr, MutableHandleObject obj);
- 
- /*
-  * Report a TypeError: "so-and-so is not an object".
-  * Using NotNullObject is usually less code.
-  */
- extern void
--ReportNotObject(JSContext* cx, const Value& v);
-+ReportNotObject(JSContext* cx, HandleValue v);
- 
- inline JSObject*
--NonNullObject(JSContext* cx, const Value& v)
-+NonNullObject(JSContext* cx, HandleValue v)
- {
-     if (v.isObject())
-         return &v.toObject();
-     ReportNotObject(cx, v);
-     return nullptr;
- }
- 
- 
-@@ -1287,17 +1287,17 @@ NonNullObjectWithName(JSContext* cx, con
- 
- 
- extern bool
- GetFirstArgumentAsObject(JSContext* cx, const CallArgs& args, const char* method,
-                          MutableHandleObject objp);
- 
- /* Helper for throwing, always returns false. */
- extern bool
--Throw(JSContext* cx, jsid id, unsigned errorNumber, const char* details = nullptr);
-+Throw(JSContext* cx, HandleId id, unsigned errorNumber, const char* details = nullptr);
- 
- /*
-  * ES6 rev 29 (6 Dec 2014) 7.3.13. Mark obj as non-extensible, and adjust each
-  * of obj's own properties' attributes appropriately: each property becomes
-  * non-configurable, and if level == Frozen, data properties become
-  * non-writable as well.
-  */
- extern bool
-diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp
---- a/js/src/vm/NativeObject.cpp
-+++ b/js/src/vm/NativeObject.cpp
-@@ -2451,17 +2451,17 @@ js::GetNameBoundInEnvironment(JSContext*
-         return GeneralizedGetProperty(cx, env, id, receiver, NameLookup, vp);
-     return NativeGetPropertyInline<CanGC>(cx, env.as<NativeObject>(), receiver, id, NameLookup, vp);
- }
- 
- 
- /*** [[Set]] *************************************************************************************/
- 
- static bool
--MaybeReportUndeclaredVarAssignment(JSContext* cx, HandleString propname)
-+MaybeReportUndeclaredVarAssignment(JSContext* cx, HandleId id)
- {
-     unsigned flags;
-     {
-         jsbytecode* pc;
-         JSScript* script = cx->currentScript(&pc, JSContext::AllowCrossRealm::Allow);
-         if (!script)
-             return true;
- 
-@@ -2470,16 +2470,17 @@ MaybeReportUndeclaredVarAssignment(JSCon
-         if (IsStrictSetPC(pc))
-             flags = JSREPORT_ERROR;
-         else if (cx->realm()->behaviors().extraWarnings(cx))
-             flags = JSREPORT_WARNING | JSREPORT_STRICT;
-         else
-             return true;
-     }
- 
-+    JSString* propname = JSID_TO_STRING(id);
-     UniqueChars bytes = StringToNewUTF8CharsZ(cx, *propname);
-     if (!bytes)
-         return false;
-     return JS_ReportErrorFlagsAndNumberUTF8(cx, flags, GetErrorMessage, nullptr,
-                                             JSMSG_UNDECLARED_VAR, bytes.get());
- }
- 
- /*
-@@ -2590,18 +2591,17 @@ js::SetPropertyOnProto(JSContext* cx, Ha
-  * steps 4.d.i and 5.
-  */
- template <QualifiedBool IsQualified>
- static bool
- SetNonexistentProperty(JSContext* cx, HandleNativeObject obj, HandleId id, HandleValue v,
-                        HandleValue receiver, ObjectOpResult& result)
- {
-     if (!IsQualified && receiver.isObject() && receiver.toObject().isUnqualifiedVarObj()) {
--        RootedString idStr(cx, JSID_TO_STRING(id));
--        if (!MaybeReportUndeclaredVarAssignment(cx, idStr))
-+        if (!MaybeReportUndeclaredVarAssignment(cx, id))
-             return false;
-     }
- 
-     // Pure optimization for the common case. There's no point performing the
-     // lookup in step 5.c again, as our caller just did it for us.
-     if (IsQualified && receiver.isObject() && obj == &receiver.toObject()) {
-         // Ensure that a custom GetOwnPropertyOp, if present, doesn't
-         // introduce additional properties which weren't previously found by
-diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
---- a/js/src/vm/SelfHosting.cpp
-+++ b/js/src/vm/SelfHosting.cpp
-@@ -289,24 +289,22 @@ ThrowErrorWithType(JSContext* cx, JSExnT
- #ifdef DEBUG
-     const JSErrorFormatString* efs = GetErrorMessage(nullptr, errorNumber);
-     MOZ_ASSERT(efs->argCount == args.length() - 1);
-     MOZ_ASSERT(efs->exnType == type, "error-throwing intrinsic and error number are inconsistent");
- #endif
- 
-     UniqueChars errorArgs[3];
-     for (unsigned i = 1; i < 4 && i < args.length(); i++) {
--        RootedValue val(cx, args[i]);
--        if (val.isInt32()) {
-+        HandleValue val = args[i];
-+        if (val.isInt32() || val.isString()) {
-             JSString* str = ToString<CanGC>(cx, val);
-             if (!str)
-                 return;
-             errorArgs[i - 1] = EncodeLatin1(cx, str);
--        } else if (val.isString()) {
--            errorArgs[i - 1] = EncodeLatin1(cx, val.toString());
-         } else {
-             errorArgs[i - 1] = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, val, nullptr);
-         }
-         if (!errorArgs[i - 1])
-             return;
-     }
- 
-     JS_ReportErrorNumberLatin1(cx, GetErrorMessage, nullptr, errorNumber,

+ 0 - 547
frg/work-js/mozilla-release/patches/mozilla-central_435008.patch

@@ -1,547 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536141683 25200
-#      Wed Sep 05 03:01:23 2018 -0700
-# Node ID e13b67ae85248f2ce726cf815a561ec0936db732
-# Parent  8fb73b65b5806c37ee76ef859682b735f9b3f588
-Bug 1485066 - Part 11: Remove the unused |inBuf| argument from JS::FormatStackDump and change it to use Sprinter. r=Waldo
-
-diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
---- a/js/src/builtin/TestingFunctions.cpp
-+++ b/js/src/builtin/TestingFunctions.cpp
-@@ -3300,17 +3300,17 @@ GetBacktrace(JSContext* cx, unsigned arg
-             return false;
-         showLocals = ToBoolean(v);
- 
-         if (!JS_GetProperty(cx, cfg, "thisprops", &v))
-             return false;
-         showThisProps = ToBoolean(v);
-     }
- 
--    JS::UniqueChars buf = JS::FormatStackDump(cx, nullptr, showArgs, showLocals, showThisProps);
-+    JS::UniqueChars buf = JS::FormatStackDump(cx, showArgs, showLocals, showThisProps);
-     if (!buf)
-         return false;
- 
-     return ReturnStringCopy(cx, args, buf.get());
- }
- 
- static bool
- ReportOutOfMemory(JSContext* cx, unsigned argc, Value* vp)
-diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
---- a/js/src/jsfriendapi.cpp
-+++ b/js/src/jsfriendapi.cpp
-@@ -2,16 +2,17 @@
-  * vim: set ts=8 sts=4 et sw=4 tw=99:
-  * This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "jsfriendapi.h"
- 
- #include "mozilla/Atomics.h"
-+#include "mozilla/Maybe.h"
- #include "mozilla/PodOperations.h"
- #include "mozilla/TimeStamp.h"
- 
- #include <stdint.h>
- 
- #ifdef ENABLE_BIGINT
- #include "builtin/BigInt.h"
- #endif
-@@ -803,72 +804,44 @@ JS_FRIEND_API(bool)
- js::DumpScript(JSContext* cx, JSScript* scriptArg)
- {
-     return DumpScript(cx, scriptArg, stdout);
- }
- 
- #endif
- 
- static const char*
--FormatValue(JSContext* cx, const Value& vArg, UniqueChars& bytes)
-+FormatValue(JSContext* cx, HandleValue v, UniqueChars& bytes)
- {
--    RootedValue v(cx, vArg);
--
-     if (v.isMagic(JS_OPTIMIZED_OUT))
-         return "[unavailable]";
- 
--    /*
--     * We could use Maybe<AutoRealm> here, but G++ can't quite follow
--     * that, and warns about uninitialized members being used in the
--     * destructor.
--     */
--    RootedString str(cx);
--    if (v.isObject()) {
--        if (IsCrossCompartmentWrapper(&v.toObject()))
--            return "[cross-compartment wrapper]";
--        AutoRealm ar(cx, &v.toObject());
-+    if (IsCallable(v))
-+        return "[function]";
-+
-+    if (v.isObject() && IsCrossCompartmentWrapper(&v.toObject()))
-+        return "[cross-compartment wrapper]";
-+
-+    JSString* str;
-+    {
-+        mozilla::Maybe<AutoRealm> ar;
-+        if (v.isObject())
-+            ar.emplace(cx, &v.toObject());
-+
-         str = ToString<CanGC>(cx, v);
--    } else {
--        str = ToString<CanGC>(cx, v);
-+        if (!str)
-+            return nullptr;
-     }
- 
--    if (!str)
--        return nullptr;
-     bytes = JS_EncodeStringToLatin1(cx, str);
--    if (!bytes)
--        return nullptr;
--    const char* buf = bytes.get();
--    const char* found = strstr(buf, "function ");
--    if (found && (found - buf <= 2))
--        return "[function]";
--    return buf;
-+    return bytes.get();
- }
- 
--// Wrapper for JS_sprintf_append() that reports allocation failure to the
--// context.
--static JS::UniqueChars
--MOZ_FORMAT_PRINTF(3, 4)
--sprintf_append(JSContext* cx, JS::UniqueChars&& buf, const char* fmt, ...)
--{
--    va_list ap;
--
--    va_start(ap, fmt);
--    JS::UniqueChars result = JS_vsprintf_append(std::move(buf), fmt, ap);
--    va_end(ap);
--
--    if (!result) {
--        ReportOutOfMemory(cx);
--        return nullptr;
--    }
--
--    return result;
--}
--
--static JS::UniqueChars
--FormatFrame(JSContext* cx, const FrameIter& iter, JS::UniqueChars&& inBuf, int num,
-+static bool
-+FormatFrame(JSContext* cx, const FrameIter& iter, Sprinter& sp, int num,
-             bool showArgs, bool showLocals, bool showThisProps)
- {
-     MOZ_ASSERT(!cx->isExceptionPending());
-     RootedScript script(cx, iter.script());
-     jsbytecode* pc = iter.pc();
- 
-     RootedObject envChain(cx, iter.environmentChain(cx));
-     JSAutoRealm ar(cx, envChain);
-@@ -882,33 +855,33 @@ FormatFrame(JSContext* cx, const FrameIt
- 
-     RootedValue thisVal(cx);
-     if (iter.hasUsableAbstractFramePtr() &&
-         iter.isFunctionFrame() &&
-         fun && !fun->isArrow() && !fun->isDerivedClassConstructor() &&
-         !(fun->isBoundFunction() && iter.isConstructing()))
-     {
-         if (!GetFunctionThis(cx, iter.abstractFramePtr(), &thisVal))
--            return nullptr;
-+            return false;
-     }
- 
-     // print the frame number and function name
--    JS::UniqueChars buf(std::move(inBuf));
-     if (funname) {
-         UniqueChars funbytes = JS_EncodeStringToLatin1(cx, funname);
-         if (!funbytes)
--            return nullptr;
--        buf = sprintf_append(cx, std::move(buf), "%d %s(", num, funbytes.get());
-+            return false;
-+        if (!sp.printf("%d %s(", num, funbytes.get()))
-+            return false;
-     } else if (fun) {
--        buf = sprintf_append(cx, std::move(buf), "%d anonymous(", num);
-+        if (!sp.printf("%d anonymous(", num))
-+            return false;
-     } else {
--        buf = sprintf_append(cx, std::move(buf), "%d <TOP LEVEL>", num);
-+        if (!sp.printf("%d <TOP LEVEL>", num))
-+            return false;
-     }
--    if (!buf)
--        return nullptr;
- 
-     if (showArgs && iter.hasArgs()) {
-         PositionalFormalParameterIter fi(script);
-         bool first = true;
-         for (unsigned i = 0; i < iter.numActualArgs(); i++) {
-             RootedValue arg(cx);
-             if (i < iter.numFormalArgs() && fi.closedOver()) {
-                 arg = iter.callObj(cx).aliasedBinding(fi);
-@@ -924,203 +897,200 @@ FormatFrame(JSContext* cx, const FrameIt
-             } else {
-                 arg = MagicValue(JS_OPTIMIZED_OUT);
-             }
- 
-             UniqueChars valueBytes;
-             const char* value = FormatValue(cx, arg, valueBytes);
-             if (!value) {
-                 if (cx->isThrowingOutOfMemory())
--                    return nullptr;
-+                    return false;
-                 cx->clearPendingException();
-             }
- 
-             UniqueChars nameBytes;
-             const char* name = nullptr;
- 
-             if (i < iter.numFormalArgs()) {
-                 MOZ_ASSERT(fi.argumentSlot() == i);
-                 if (!fi.isDestructured()) {
-                     nameBytes = JS_EncodeStringToLatin1(cx, fi.name());
-                     name = nameBytes.get();
-                     if (!name)
--                        return nullptr;
-+                        return false;
-                 } else {
-                     name = "(destructured parameter)";
-                 }
-                 fi++;
-             }
- 
-             if (value) {
--                buf = sprintf_append(cx, std::move(buf), "%s%s%s%s%s%s",
--                                     !first ? ", " : "",
--                                     name ? name :"",
--                                     name ? " = " : "",
--                                     arg.isString() ? "\"" : "",
--                                     value,
--                                     arg.isString() ? "\"" : "");
--                if (!buf)
--                    return nullptr;
-+                if (!sp.printf("%s%s%s%s%s%s",
-+                               !first ? ", " : "",
-+                               name ? name :"",
-+                               name ? " = " : "",
-+                               arg.isString() ? "\"" : "",
-+                               value,
-+                               arg.isString() ? "\"" : ""))
-+                {
-+                    return false;
-+                }
- 
-                 first = false;
-             } else {
--                buf = sprintf_append(cx, std::move(buf),
--                                     "    <Failed to get argument while inspecting stack frame>\n");
--                if (!buf)
--                    return nullptr;
-+                if (!sp.put("    <Failed to get argument while inspecting stack frame>\n"))
-+                    return false;
- 
-             }
-         }
-     }
- 
-     // print filename and line number
--    buf = sprintf_append(cx, std::move(buf), "%s [\"%s\":%d]\n",
--                         fun ? ")" : "",
--                         filename ? filename : "<unknown>",
--                         lineno);
--    if (!buf)
--        return nullptr;
--
-+    if (!sp.printf("%s [\"%s\":%d]\n",
-+                   fun ? ")" : "",
-+                   filename ? filename : "<unknown>",
-+                   lineno))
-+    {
-+        return false;
-+    }
- 
-     // Note: Right now we don't dump the local variables anymore, because
-     // that is hard to support across all the JITs etc.
- 
-     // print the value of 'this'
-     if (showLocals) {
-         if (!thisVal.isUndefined()) {
--            UniqueChars thisValBytes;
-             RootedString thisValStr(cx, ToString<CanGC>(cx, thisVal));
-             if (!thisValStr) {
-                 if (cx->isThrowingOutOfMemory())
--                    return nullptr;
-+                    return false;
-                 cx->clearPendingException();
-             }
-             if (thisValStr) {
--                thisValBytes = JS_EncodeStringToLatin1(cx, thisValStr);
-+                UniqueChars thisValBytes = JS_EncodeStringToLatin1(cx, thisValStr);
-                 if (!thisValBytes)
--                    return nullptr;
--                buf = sprintf_append(cx, std::move(buf), "    this = %s\n", thisValBytes.get());
-+                    return false;
-+                if (!sp.printf("    this = %s\n", thisValBytes.get()))
-+                    return false;
-             } else {
--                buf = sprintf_append(cx, std::move(buf), "    <failed to get 'this' value>\n");
-+                if (!sp.put("    <failed to get 'this' value>\n"))
-+                    return false;
-             }
--            if (!buf)
--                return nullptr;
-         }
-     }
- 
-     if (showThisProps && thisVal.isObject()) {
-         RootedObject obj(cx, &thisVal.toObject());
- 
-         AutoIdVector keys(cx);
-         if (!GetPropertyKeys(cx, obj, JSITER_OWNONLY, &keys)) {
-             if (cx->isThrowingOutOfMemory())
--                return nullptr;
-+                return false;
-             cx->clearPendingException();
-         }
- 
--        RootedId id(cx);
-         for (size_t i = 0; i < keys.length(); i++) {
-             RootedId id(cx, keys[i]);
-             RootedValue key(cx, IdToValue(id));
-             RootedValue v(cx);
- 
-             if (!GetProperty(cx, obj, obj, id, &v)) {
-                 if (cx->isThrowingOutOfMemory())
--                    return nullptr;
-+                    return false;
-                 cx->clearPendingException();
--                buf = sprintf_append(cx, std::move(buf),
--                                     "    <Failed to fetch property while inspecting stack frame>\n");
--                if (!buf)
--                    return nullptr;
-+                if (!sp.put("    <Failed to fetch property while inspecting stack frame>\n"))
-+                    return false;
-                 continue;
-             }
- 
-             UniqueChars nameBytes;
-             const char* name = FormatValue(cx, key, nameBytes);
-             if (!name) {
-                 if (cx->isThrowingOutOfMemory())
--                    return nullptr;
-+                    return false;
-                 cx->clearPendingException();
-             }
- 
-             UniqueChars valueBytes;
-             const char* value = FormatValue(cx, v, valueBytes);
-             if (!value) {
-                 if (cx->isThrowingOutOfMemory())
--                    return nullptr;
-+                    return false;
-                 cx->clearPendingException();
-             }
- 
-             if (name && value) {
--                buf = sprintf_append(cx, std::move(buf), "    this.%s = %s%s%s\n",
--                                     name,
--                                     v.isString() ? "\"" : "",
--                                     value,
--                                     v.isString() ? "\"" : "");
-+                if (!sp.printf("    this.%s = %s%s%s\n",
-+                               name,
-+                               v.isString() ? "\"" : "",
-+                               value,
-+                               v.isString() ? "\"" : ""))
-+                {
-+                    return false;
-+                }
-             } else {
--                buf = sprintf_append(cx, std::move(buf),
--                                     "    <Failed to format values while inspecting stack frame>\n");
-+                if (!sp.put("    <Failed to format values while inspecting stack frame>\n"))
-+                    return false;
-             }
--            if (!buf)
--                return nullptr;
-         }
-     }
- 
-     MOZ_ASSERT(!cx->isExceptionPending());
--    return buf;
-+    return true;
- }
- 
--static JS::UniqueChars
--FormatWasmFrame(JSContext* cx, const FrameIter& iter, JS::UniqueChars&& inBuf, int num)
-+static bool
-+FormatWasmFrame(JSContext* cx, const FrameIter& iter, Sprinter& sp, int num)
- {
-     UniqueChars nameStr;
-     if (JSAtom* functionDisplayAtom = iter.maybeFunctionDisplayAtom()) {
-         nameStr = StringToNewUTF8CharsZ(cx, *functionDisplayAtom);
-         if (!nameStr)
--            return nullptr;
-+            return false;
-     }
- 
--    JS::UniqueChars buf = sprintf_append(cx, std::move(inBuf), "%d %s()",
--                                         num,
--                                         nameStr ? nameStr.get() : "<wasm-function>");
--    if (!buf)
--        return nullptr;
-+    if (!sp.printf("%d %s()", num, nameStr ? nameStr.get() : "<wasm-function>"))
-+        return false;
- 
--    buf = sprintf_append(cx, std::move(buf), " [\"%s\":wasm-function[%d]:0x%x]\n",
--                         iter.filename() ? iter.filename() : "<unknown>",
--                         iter.wasmFuncIndex(),
--                         iter.wasmBytecodeOffset());
--    if (!buf)
--        return nullptr;
-+    if (!sp.printf(" [\"%s\":wasm-function[%d]:0x%x]\n",
-+                   iter.filename() ? iter.filename() : "<unknown>",
-+                   iter.wasmFuncIndex(),
-+                   iter.wasmBytecodeOffset()))
-+    {
-+        return false;
-+    }
- 
-     MOZ_ASSERT(!cx->isExceptionPending());
--    return buf;
-+    return true;
- }
- 
- JS_FRIEND_API(JS::UniqueChars)
--JS::FormatStackDump(JSContext* cx, JS::UniqueChars&& inBuf, bool showArgs, bool showLocals,
--                    bool showThisProps)
-+JS::FormatStackDump(JSContext* cx, bool showArgs, bool showLocals, bool showThisProps)
- {
-     int num = 0;
- 
--    JS::UniqueChars buf(std::move(inBuf));
-+    Sprinter sp(cx);
-+    if (!sp.init())
-+        return nullptr;
-+
-     for (AllFramesIter i(cx); !i.done(); ++i) {
--        if (i.hasScript())
--            buf = FormatFrame(cx, i, std::move(buf), num, showArgs, showLocals, showThisProps);
--        else
--            buf = FormatWasmFrame(cx, i, std::move(buf), num);
--        if (!buf)
-+        bool ok = i.hasScript()
-+                  ? FormatFrame(cx, i, sp, num, showArgs, showLocals, showThisProps)
-+                  : FormatWasmFrame(cx, i, sp, num);
-+        if (!ok)
-             return nullptr;
-         num++;
-     }
- 
--    if (!num)
--        buf = JS_sprintf_append(std::move(buf), "JavaScript stack is empty\n");
-+    if (num == 0) {
-+        if (!sp.put("JavaScript stack is empty\n"))
-+            return nullptr;
-+    }
- 
--    return buf;
-+    return sp.release();
- }
- 
- extern JS_FRIEND_API(bool)
- JS::ForceLexicalInitialization(JSContext *cx, HandleObject obj)
- {
-     AssertHeapIsIdle();
-     CHECK_THREAD(cx);
-     cx->check(obj);
-diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h
---- a/js/src/jsfriendapi.h
-+++ b/js/src/jsfriendapi.h
-@@ -296,18 +296,17 @@ extern JS_FRIEND_API(void)
- DumpBacktrace(JSContext* cx);
- 
- } // namespace js
- 
- namespace JS {
- 
- /** Exposed for DumpJSStack */
- extern JS_FRIEND_API(JS::UniqueChars)
--FormatStackDump(JSContext* cx, JS::UniqueChars&& buf, bool showArgs, bool showLocals,
--                bool showThisProps);
-+FormatStackDump(JSContext* cx, bool showArgs, bool showLocals, bool showThisProps);
- 
- /**
-  * Set all of the uninitialized lexicals on an object to undefined. Return
-  * true if any lexicals were initialized and false otherwise.
-  * */
- extern JS_FRIEND_API(bool)
- ForceLexicalInitialization(JSContext *cx, HandleObject obj);
- 
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -4182,17 +4182,17 @@ StackDump(JSContext* cx, unsigned argc, 
-         JS_ReportErrorASCII(cx, "output file is closed");
-         return false;
-     }
- 
-     bool showArgs = ToBoolean(args.get(0));
-     bool showLocals = ToBoolean(args.get(1));
-     bool showThisProps = ToBoolean(args.get(2));
- 
--    JS::UniqueChars buf = JS::FormatStackDump(cx, nullptr, showArgs, showLocals, showThisProps);
-+    JS::UniqueChars buf = JS::FormatStackDump(cx, showArgs, showLocals, showThisProps);
-     if (!buf) {
-         fputs("Failed to format JavaScript stack for dump\n", gOutFile->fp);
-         JS_ClearPendingException(cx);
-     } else {
-         fputs(buf.get(), gOutFile->fp);
-     }
- 
-     args.rval().setUndefined();
-diff --git a/js/xpconnect/src/XPCDebug.cpp b/js/xpconnect/src/XPCDebug.cpp
---- a/js/xpconnect/src/XPCDebug.cpp
-+++ b/js/xpconnect/src/XPCDebug.cpp
-@@ -48,15 +48,15 @@ xpc_DumpJSStack(bool showArgs, bool show
- }
- 
- JS::UniqueChars
- xpc_PrintJSStack(JSContext* cx, bool showArgs, bool showLocals,
-                  bool showThisProps)
- {
-     JS::AutoSaveExceptionState state(cx);
- 
--    JS::UniqueChars buf = JS::FormatStackDump(cx, nullptr, showArgs, showLocals, showThisProps);
-+    JS::UniqueChars buf = JS::FormatStackDump(cx, showArgs, showLocals, showThisProps);
-     if (!buf)
-         DebugDump("%s", "Failed to format JavaScript stack for dump\n");
- 
-     state.restore();
-     return buf;
- }
-diff --git a/xpcom/base/CycleCollectedJSRuntime.cpp b/xpcom/base/CycleCollectedJSRuntime.cpp
---- a/xpcom/base/CycleCollectedJSRuntime.cpp
-+++ b/xpcom/base/CycleCollectedJSRuntime.cpp
-@@ -1637,17 +1637,17 @@ CycleCollectedJSRuntime::ErrorIntercepto
-   details.mType = *type;
-   // If `exn` isn't an exception object, `ExtractErrorValues` could end up calling
-   // `toString()`, which could in turn end up throwing an error. While this should
-   // work, we want to avoid that complex use case.
-   // Fortunately, we have already checked above that `exn` is an exception object,
-   // so nothing such should happen.
-   nsContentUtils::ExtractErrorValues(cx, value, details.mFilename, &details.mLine, &details.mColumn, details.mMessage);
- 
--  JS::UniqueChars buf = JS::FormatStackDump(cx, nullptr, /* showArgs = */ false, /* showLocals = */ false, /* showThisProps = */ false);
-+  JS::UniqueChars buf = JS::FormatStackDump(cx, /* showArgs = */ false, /* showLocals = */ false, /* showThisProps = */ false);
-   CopyUTF8toUTF16(mozilla::MakeStringSpan(buf.get()), details.mStack);
- 
-   mThrownError.emplace(std::move(details));
- }
- 
- void
- CycleCollectedJSRuntime::ClearRecentDevError()
- {

+ 0 - 115
frg/work-js/mozilla-release/patches/mozilla-central_435011.patch

@@ -1,115 +0,0 @@
-# HG changeset patch
-# User Andre Bargull <andre.bargull@gmail.com>
-# Date 1536135912 25200
-#      Wed Sep 05 01:25:12 2018 -0700
-# Node ID 4bafa1db31b1028db8ca1a69e6a1a24012aded12
-# Parent  44d8851437603d5684911c59e53d1254451cb4b3
-Bug 1485066 - Part 14: Change FormatStackDump to return UTF-8 encoded strings. r=Waldo
-
-diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
---- a/js/src/builtin/TestingFunctions.cpp
-+++ b/js/src/builtin/TestingFunctions.cpp
-@@ -3304,17 +3304,23 @@ GetBacktrace(JSContext* cx, unsigned arg
-             return false;
-         showThisProps = ToBoolean(v);
-     }
- 
-     JS::UniqueChars buf = JS::FormatStackDump(cx, showArgs, showLocals, showThisProps);
-     if (!buf)
-         return false;
- 
--    return ReturnStringCopy(cx, args, buf.get());
-+    JS::ConstUTF8CharsZ utf8chars(buf.get(), strlen(buf.get()));
-+    JSString* str = NewStringCopyUTF8Z<CanGC>(cx, utf8chars);
-+    if (!str)
-+        return false;
-+
-+    args.rval().setString(str);
-+    return true;
- }
- 
- static bool
- ReportOutOfMemory(JSContext* cx, unsigned argc, Value* vp)
- {
-     CallArgs args = CallArgsFromVp(argc, vp);
-     JS_ReportOutOfMemory(cx);
-     cx->clearPendingException();
-diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
---- a/js/src/jsfriendapi.cpp
-+++ b/js/src/jsfriendapi.cpp
-@@ -826,17 +826,17 @@ FormatValue(JSContext* cx, HandleValue v
-         if (v.isObject())
-             ar.emplace(cx, &v.toObject());
- 
-         str = ToString<CanGC>(cx, v);
-         if (!str)
-             return nullptr;
-     }
- 
--    bytes = JS_EncodeStringToLatin1(cx, str);
-+    bytes = StringToNewUTF8CharsZ(cx, *str);
-     return bytes.get();
- }
- 
- static bool
- FormatFrame(JSContext* cx, const FrameIter& iter, Sprinter& sp, int num,
-             bool showArgs, bool showLocals, bool showThisProps)
- {
-     MOZ_ASSERT(!cx->isExceptionPending());
-@@ -860,17 +860,17 @@ FormatFrame(JSContext* cx, const FrameIt
-         !(fun->isBoundFunction() && iter.isConstructing()))
-     {
-         if (!GetFunctionThis(cx, iter.abstractFramePtr(), &thisVal))
-             return false;
-     }
- 
-     // print the frame number and function name
-     if (funname) {
--        UniqueChars funbytes = JS_EncodeStringToLatin1(cx, funname);
-+        UniqueChars funbytes = StringToNewUTF8CharsZ(cx, *funname);
-         if (!funbytes)
-             return false;
-         if (!sp.printf("%d %s(", num, funbytes.get()))
-             return false;
-     } else if (fun) {
-         if (!sp.printf("%d anonymous(", num))
-             return false;
-     } else {
-@@ -907,17 +907,17 @@ FormatFrame(JSContext* cx, const FrameIt
-             }
- 
-             UniqueChars nameBytes;
-             const char* name = nullptr;
- 
-             if (i < iter.numFormalArgs()) {
-                 MOZ_ASSERT(fi.argumentSlot() == i);
-                 if (!fi.isDestructured()) {
--                    nameBytes = JS_EncodeStringToLatin1(cx, fi.name());
-+                    nameBytes = StringToNewUTF8CharsZ(cx, *fi.name());
-                     name = nameBytes.get();
-                     if (!name)
-                         return false;
-                 } else {
-                     name = "(destructured parameter)";
-                 }
-                 fi++;
-             }
-@@ -960,17 +960,17 @@ FormatFrame(JSContext* cx, const FrameIt
-         if (!thisVal.isUndefined()) {
-             RootedString thisValStr(cx, ToString<CanGC>(cx, thisVal));
-             if (!thisValStr) {
-                 if (cx->isThrowingOutOfMemory())
-                     return false;
-                 cx->clearPendingException();
-             }
-             if (thisValStr) {
--                UniqueChars thisValBytes = JS_EncodeStringToLatin1(cx, thisValStr);
-+                UniqueChars thisValBytes = StringToNewUTF8CharsZ(cx, *thisValStr);
-                 if (!thisValBytes)
-                     return false;
-                 if (!sp.printf("    this = %s\n", thisValBytes.get()))
-                     return false;
-             } else {
-                 if (!sp.put("    <failed to get 'this' value>\n"))
-                     return false;
-             }

+ 49 - 63
frg/work-js/mozilla-release/patches/series

@@ -6123,19 +6123,61 @@ NOBUG-20180824-buildsetting-63a1.patch
 1485738-63a1.patch
 1486397-63a1.patch
 1487662-63a1.patch
-1483962-63a1.patch
+1483962-64a1.patch
 1267297-64a1.patch
 1480552-64a1.patch
-taken-out-stuff-comes-here.patch
+1440468-64a1.patch
+1488173-64a1.patch
+1488227-64a1.patch
+1486125-64a1.patch
+1330661-1-64a1.patch
+1330661-2-64a1.patch
+1330661-3-64a1.patch
+1330661-4-64a1.patch
+1330661-5-64a1.patch
+1488192-64a1.patch
+1488191-64a1.patch
+1488553-64a1.patch
+1467907-64a1.patch
+1487327-64a1.patch
+722345-1-64a1.patch
+722345-2-64a1.patch
+722345-3-64a1.patch
+1488463-64a1.patch
+1488461-64a1.patch
+1487329-1-64a1.patch
+1487329-2-64a1.patch
+1485452-64a1.patch
+1485460-64a1.patch
+1483323-1-64a1.patch
+1483323-2-64a1.patch
+1483323-3-64a1.patch
+1483323-4-64a1.patch
+1483323-5-64a1.patch
 1483323-6-64a1.patch
+1485066-01-64a1.patch
+1485066-02-64a1.patch
+1485066-03-64a1.patch
+1485066-04-64a1.patch
+1485066-05-64a1.patch
+1485066-06-64a1.patch
+1485066-07-64a1.patch
+1485066-08-64a1.patch
+1485066-09-64a1.patch
+1485066-10-64a1.patch
+1485066-11-64a1.patch
+1485066-12-64a1.patch
+1485066-13-64a1.patch
+1485066-14-64a1.patch
+taken-out-stuff-comes-here.patch
 1484611-2ano1-64a1.patch
 1484611-2b-64a1.patch
 1417646-1-64a1.patch
 1487419-64a1.patch
 1488698-2-PARTIAL-biginttype-64a1.patch
 1489601-64a1.patch
-1488698-7-WIP-64a1.patch
-#1488698-7-64a1.patch
+1488698-7-64a1.patch
+#1488698-7-ORG-64a1.patch
 #1484948-64a1.patch
 1489944-64a1.patch
 #1492074-64a1.patch
@@ -6149,7 +6191,6 @@ taken-out-stuff-comes-here.patch
 1482425-64a1.patch
 1420028-2-fix-64a1.patch
 1488632-64a1.patch
-1488463-64a1.patch
 1475141-64a1.patch
 1489001-64a1.patch
 1446066-64a1.patch
@@ -8644,8 +8685,8 @@ TOP-NOBUG-REGEXP-47-fixes-25319.patch
 
 
 
-ipc-start
 
+ipc-start
 
 dynamic-imports-ioptionsl-start
 ccccccc.fixit.patch
@@ -11539,56 +11580,12 @@ mozilla-central-push_434077.patch
 mozilla-central-push_434464.patch
 64a1-start
 mozilla-central-push_434599.patch
+mozilla-central-push_434608.patch
+
 
 the-taken-out-stuff-start.patch
 I-am-here.patch
-mozilla-central-push_434608.patch
-mozilla-central-push_434620.patch
-mozilla-central-push_434622.patch
-mozilla-central-push_434623.patch
-mozilla-central-push_434625.patch
-mozilla-central-push_434677.patch
-mozilla-central-push_434730.patch
-mozilla-central-push_434731.patch
-mozilla-central-push_434732.patch
-mozilla-central-push_434733.patch
-mozilla-central-push_434735.patch
-mozilla-central-push_434740.patch
-mozilla-central-push_434741.patch
-mozilla-central-push_434784.patch
-mozilla-central-push_434798.patch
-mozilla-central-push_434812.patch
-mozilla-central-push_434817.patch
-mozilla-central-push_434818.patch
-mozilla-central-push_434819.patch
-mozilla-central-push_434823.patch
-mozilla-central-push_434824.patch
-mozilla-central-push_434931.patch
-mozilla-central-push_434932.patch
-mozilla-central-push_434955.patch
-mozilla-central-push_434956.patch
-mozilla-central-push_434986.patch
-mozilla-central-push_434987.patch
-mozilla-central-push_434988.patch
-mozilla-central-push_434989.patch
-mozilla-central-push_434990.patch
-mozilla-central-push_434991.patch
-mozilla-central-push_434998.patch
-mozilla-central-push_434999.patch
-mozilla-central-push_435000.patch
-mozilla-central-push_435001.patch
-mozilla-central-push_435002.patch
-mozilla-central-push_435003.patch
-mozilla-central-push_435004.patch
-mozilla-central-push_435005.patch
-mozilla-central-push_435006.patch
-mozilla-central-push_435007.patch
-mozilla-central-push_435008.patch
-mozilla-central-push_435009.patch
-mozilla-central-push_435010.patch
-mozilla-central-push_435011.patch
 mozilla-central-push_435051.patch
-mozilla-central-push_435107.patch
 mozilla-central-push_435120.patch
 mozilla-central-push_435128.patch
 mozilla-central-push_435148.patch
@@ -11599,14 +11596,10 @@ mozilla-central-push_435228.patch
 mozilla-central-push_435244.patch
 mozilla-central-push_435247.patch
 mozilla-central-push_435270.patch
-mozilla-central-push_435279.patch
 mozilla-central-push_435284.patch
 mozilla-central-push_435285.patch
-mozilla-central-push_435288.patch
 mozilla-central-push_435296.patch
-mozilla-central-push_435297.patch
 mozilla-central-push_435298.patch
-mozilla-central-push_435299.patch
 mozilla-central-push_435300.patch
 mozilla-central-push_435304.patch
 mozilla-central-push_435320.patch
@@ -11630,7 +11623,6 @@ mozilla-central-push_435499.patch
 mozilla-central-push_435500.patch
 mozilla-central-push_435534.patch
 mozilla-central-push_435566.patch
-mozilla-central-push_435567.patch
 mozilla-central-push_435610.patch
 mozilla-central-push_435619.patch
 mozilla-central-push_435620.patch
@@ -11788,7 +11780,6 @@ mozilla-central-push_437154.patch
 mozilla-central-push_437187.patch
 mozilla-central-push_437188.patch
 mozilla-central-push_437189.patch
-mozilla-central-push_437190.patch
 mozilla-central-push_437191.patch
 mozilla-central-push_437192.patch
 mozilla-central-push_437213.patch
@@ -11854,7 +11845,6 @@ mozilla-central-push_438147.patch
 mozilla-central-push_438149.patch
 mozilla-central-push_438163.patch
 mozilla-central-push_438183.patch
-mozilla-central-push_438185.patch
 mozilla-central-push_438245.patch
 mozilla-central-push_438253.patch
 mozilla-central-push_438301.patch
@@ -11864,7 +11854,6 @@ mozilla-central-push_438359.patch
 mozilla-central-push_438428.patch
 mozilla-central-push_438535.patch
 mozilla-central-push_438570.patch
-mozilla-central-push_438583.patch
 mozilla-central-push_438592.patch
 mozilla-central-push_438593.patch
 mozilla-central-push_438594.patch
@@ -11887,7 +11876,6 @@ mozilla-central-push_438833.patch
 mozilla-central-push_438838.patch
 mozilla-central-push_438878.patch
 mozilla-central-push_438880.patch
-mozilla-central-push_438916.patch
 mozilla-central-push_438925.patch
 mozilla-central-push_438959.patch
 mozilla-central-push_438964.patch
@@ -11895,7 +11883,6 @@ mozilla-central-push_438965.patch
 mozilla-central-push_438983.patch
 mozilla-central-push_439038.patch
 mozilla-central-push_439115.patch
-mozilla-central-push_439127.patch
 mozilla-central-push_439162.patch
 mozilla-central-push_439166.patch
 mozilla-central-push_439167.patch
@@ -11919,7 +11906,6 @@ mozilla-central-push_439334.patch
 mozilla-central-push_439377.patch
 mozilla-central-push_439448.patch
 mozilla-central-push_439449.patch
-mozilla-central-push_439456.patch
 mozilla-central-push_439469.patch
 mozilla-central-push_439474.patch
 mozilla-central-push_439491.patch

+ 44 - 3
frg/work-js/mozilla-release/patches/series-test

@@ -6123,17 +6123,59 @@ NOBUG-20180824-buildsetting-63a1.patch
 1485738-63a1.patch
 1486397-63a1.patch
 1487662-63a1.patch
-1483962-63a1.patch
+1483962-64a1.patch
 1267297-64a1.patch
 1480552-64a1.patch
+1440468-64a1.patch
+1488173-64a1.patch
+1488227-64a1.patch
+1486125-64a1.patch
+1330661-1-64a1.patch
+1330661-2-64a1.patch
+1330661-3-64a1.patch
+1330661-4-64a1.patch
+1330661-5-64a1.patch
+1488192-64a1.patch
+1488191-64a1.patch
+1488553-64a1.patch
+1467907-64a1.patch
+1487327-64a1.patch
+722345-1-64a1.patch
+722345-2-64a1.patch
+722345-3-64a1.patch
+1488463-64a1.patch
+1488461-64a1.patch
+1487329-1-64a1.patch
+1487329-2-64a1.patch
+1485452-64a1.patch
+1485460-64a1.patch
+1483323-1-64a1.patch
+1483323-2-64a1.patch
+1483323-3-64a1.patch
+1483323-4-64a1.patch
+1483323-5-64a1.patch
 1483323-6-64a1.patch
+1485066-01-64a1.patch
+1485066-02-64a1.patch
+1485066-03-64a1.patch
+1485066-04-64a1.patch
+1485066-05-64a1.patch
+1485066-06-64a1.patch
+1485066-07-64a1.patch
+1485066-08-64a1.patch
+1485066-09-64a1.patch
+1485066-10-64a1.patch
+1485066-11-64a1.patch
+1485066-12-64a1.patch
+1485066-13-64a1.patch
+1485066-14-64a1.patch
 1484611-2ano1-64a1.patch
 1484611-2b-64a1.patch
 1417646-1-64a1.patch
 1487419-64a1.patch
 1488698-2-PARTIAL-biginttype-64a1.patch
 1489601-64a1.patch
-1488698-7-WIP-64a1.patch
+1488698-7-64a1.patch
 1489944-64a1.patch
 1493227-64a1.patch
 1495573-64a1.patch
@@ -6142,7 +6184,6 @@ NOBUG-20180824-buildsetting-63a1.patch
 1482425-64a1.patch
 1420028-2-fix-64a1.patch
 1488632-64a1.patch
-1488463-64a1.patch
 1475141-64a1.patch
 1489001-64a1.patch
 1446066-64a1.patch

+ 8565 - 0
frg/work-js/mozilla-release/patches/series-test.bak

@@ -0,0 +1,8565 @@
+1773966-1-NSS380-103a1.patch
+1773966-2-NSS380-103a1.patch
+1779398-1-NSS381-104a1.patch
+1779398-2-NSS381-104a1.patch
+1779398-3-NSS381-104a1.patch
+1785784-NSS382-105a1.patch
+1787505-NSS383-106a1.patch
+1788009-1-NSPR435-106a1.patch
+1788009-2-NSPR435-106a1.patch
+1787505-2-NSS383-106a1.patch
+1787505-3-NSS383-106a1.patch
+1792135-1-NSS384-107a1.patch
+1792135-2-NSS384-107a1.patch
+1795087-1-NSS385-108a1.patch
+1795087-2-NSS385-108a1.patch
+1795087-3-NSS385-108a1.patch
+1795087-4-NSS385-108a1.patch
+1802996-1-NSS386-109a1.patch
+1802996-2-NSS386-109a1.patch
+1805486-1-NSS387-110a1.patch
+1805486-2-NSS387-110a1.patch
+1808725-1-NSS388-111a1.patch
+1808725-2-NSS388-111a1.patch
+1815978-NSS3881-111a1.patch
+1815435-1-NSS389-112a1.patch
+1815435-2-NSS389-112a1.patch
+1831621-NSS3891-114a1.patch
+1821434-1-NSS390-114a1.patch
+1821434-2-NSS390-114a1.patch
+NOBUG-20170803-promisehelper-57a1.patch
+1386275-57a1.patch
+1373563-1-57a1.patch
+1380617-01-57a1.patch
+1380617-02-57a1.patch
+1380617-03-57a1.patch
+1380617-04-57a1.patch
+1380617-05-57a1.patch
+1380617-06-57a1.patch
+1380617-07-57a1.patch
+1380617-08no09-57a1.patch
+1388954-57a1.patch
+1372927-57a1.patch
+1380617-10-57a1.patch
+1380512-57a1.patch
+1390675-57a1.patch
+1387088-57a1.patch
+1372592-57a1.patch
+1393900-57a1.patch
+1394235-57a1.patch
+1391704-57a1.patch
+1388331-57a1.patch
+1395990-1no2-57a1.patch
+1395990-3-57a1.patch
+1396888-57a1.patch
+1394554-1-57a1.patch
+1394554-2-57a1.patch
+1394554-3-57a1.patch
+1396798-1-57a1.patch
+1396798-2-57a1.patch
+1398691-57a1.patch
+1399699-57a1.patch
+1398692-1-57a1.patch
+1398692-2-57a1.patch
+1401242-57a1.patch
+1394804-1-57a1.patch
+1394804-2-57a1.patch
+1394804-3-57a1.patch
+1391421-2no1-58a1.patch
+1391421-4no3or5to9-58a1.patch
+1400846-58a1.patch
+1401187-1-58a1.patch
+1401187-2-58a1.patch
+1401146-58a1.patch
+1250832-58a1.patch
+1394559-58a1.patch
+1304328-58a1.patch
+1403175-1-58a1.patch
+1403175-2-58a1.patch
+1403489-58a1.patch
+1398576-58a1.patch
+1403494-58a1.patch
+1403486-58a1.patch
+1403831-58a1.patch
+1401343-58a1.patch
+1402394-58a1.patch
+1402237-58a1.patch
+1392533-58a1.patch
+1403866-58a1.patch
+1305777-1-58a1.patch
+1305777-2-58a1.patch
+1305777-3-58a1.patch
+1305777-4-58a1.patch
+1305777-5-58a1.patch
+1305777-6-58a1.patch
+1305777-7-58a1.patch
+1402262-58a1.patch
+1404578-58a1.patch
+1331163-1-58a1.patch
+1331163-2-58a1.patch
+1331163-3-58a1.patch
+1398524-58a1.patch
+1385398-58a1.patch
+1399948-2-58a1.patch
+1403065-58a1.patch
+1402397-58a1.patch
+1403244-58a1.patch
+1383037-58a1.patch
+1398722-58a1.patch
+1403389-58a1.patch
+1405063-58a1.patch
+1402848-58a1.patch
+1399589-1-58a1.patch
+1399589-2-58a1.patch
+1399589-3-58a1.patch
+1399589-4-58a1.patch
+1402387-58a1.patch
+1348960-58a1.patch
+1404197-58a1.patch
+1403641-1-58a1.patch
+1403641-2-58a1.patch
+1405339-58a1.patch
+1405246-58a1.patch
+1385995-58a1.patch
+1406085-58a1.patch
+1401560-58a1.patch
+1405958-58a1.patch
+1250255-58a1.patch
+1404227-58a1.patch
+1399886-1-58a1.patch
+1399886-2-58a1.patch
+1399886-3-58a1.patch
+1399886-4-58a1.patch
+1396286-58a1.patch
+1406042-58a1.patch
+1406182-58a1.patch
+1406660-58a1.patch
+1405983-1-58a1.patch
+1405983-2-58a1.patch
+1168092-58a1.patch
+1402389-58a1.patch
+1402391-58a1.patch
+1407230-58a1.patch
+1400023-58a1.patch
+1404130-58a1.patch
+1406551-58a1.patch
+1383870-58a1.patch
+1406312-58a1.patch
+1407026-58a1.patch
+1404843-58a1.patch
+1395759-1-58a1.patch
+1395759-2-58a1.patch
+1342549-58a1.patch
+1406564-58a1.patch
+1406778-58a1.patch
+1403910-58a1.patch
+1405070-1-58a1.patch
+1405070-2-58a1.patch
+1355747-58a1.patch
+1407840-58a1.patch
+1399314-1-58a1.patch
+1399314-2-58a1.patch
+1407548-58a1.patch
+1403680-58a1.patch
+1407552-58a1.patch
+1408777-3-58a1.patch
+1404882-58a1.patch
+1408958-58a1.patch
+1281875-58a1.patch
+1005755-1-58a1.patch
+1005755-2-58a1.patch
+1005755-3-58a1.patch
+1005755-4-58a1.patch
+1005755-5-58a1.patch
+1408321-58a1.patch
+1408845-58a1.patch
+1406100-58a1.patch
+1407426-1-58a1.patch
+1407426-2-58a1.patch
+1179820-1-58a1.patch
+1179820-2-58a1.patch
+1179820-3-58a1.patch
+1179820-4-58a1.patch
+1179820-5-58a1.patch
+1407900-1-58a1.patch
+1407900-2-58a1.patch
+1407900-3-58a1.patch
+1407900-4-58a1.patch
+1407830-1-58a1.patch
+1407830-2-58a1.patch
+1407830-3-58a1.patch
+1387827-58a1.patch
+1408870-58a1.patch
+1407550-58a1.patch
+833747-58a1.patch
+1408451-58a1.patch
+1408872-58a1.patch
+1406311-1-58a1.patch
+1406311-2-58a1.patch
+1406311-3-58a1.patch
+1406311-4-58a1.patch
+1406311-5-58a1.patch
+1408085-58a1.patch
+1405456-58a1.patch
+1399493-58a1.patch
+1409684-58a1.patch
+1339800-58a1.patch
+1402390-58a1.patch
+1408143-58a1.patch
+1408468-1-58a1.patch
+1408468-2-58a1.patch
+1401207-1-58a1.patch
+1401207-2-58a1.patch
+1230373-3a-58a1.patch
+1406061-58a1.patch
+1408562-58a1.patch
+1409968-1-58a1.patch
+1409968-2-58a1.patch
+1404829-58a1.patch
+1408915-58a1.patch
+1403927-1-58a1.patch
+1403927-2-58a1.patch
+1409436-58a1.patch
+1409606-58a1.patch
+1408916-58a1.patch
+1406375-1-58a1.patch
+1406375-2-58a1.patch
+1406375-3-58a1.patch
+1384463-58a1.patch
+1405652-58a1.patch
+1410071-58a1.patch
+1171482-1-58a1.patch
+1171482-2-58a1.patch
+1171482-3-58a1.patch
+1171482-4-58a1.patch
+1411231-58a1.patch
+1251836-58a1.patch
+1410119-58a1.patch
+1411202-58a1.patch
+1411199-58a1.patch
+1409970-1-58a1.patch
+1409970-2-58a1.patch
+1409064-58a1.patch
+1411531-58a1.patch
+1408917-58a1.patch
+1411502-58a1.patch
+1408918-58a1.patch
+1403458-58a1.patch
+1409967-58a1.patch
+1408921-58a1.patch
+1411863-58a1.patch
+1410782-58a1.patch
+1388335-58a1.patch
+1377677-58a1.patch
+1405585-1-PARTIAL-58a1.patch
+1411160-58a1.patch
+1411161-58a1.patch
+1411368-2-58a1.patch
+1411368-4-58a1.patch
+1399465-58a1.patch
+1400115-1-58a1.patch
+1400115-2-58a1.patch
+1400115-3-58a1.patch
+1404801-1-58a1.patch
+1404801-2-58a1.patch
+1404801-3-58a1.patch
+1404801-4-58a1.patch
+1404801-5-58a1.patch
+1404801-6-58a1.patch
+1406610-1-58a1.patch
+1406610-2-58a1.patch
+1412538-58a1.patch
+1411090-1-58a1.patch
+1411090-2-58a1.patch
+1408923-58a1.patch
+1408922-58a1.patch
+1391688-1-58a1.patch
+1391688-2-58a1.patch
+1391688-3-58a1.patch
+1412049-58a1.patch
+1408924-58a1.patch
+1408737-58a1.patch
+1412074-58a1.patch
+1411727-58a1.patch
+1411855-58a1.patch
+1411887-PARTIAL-58a1.patch
+1412269-58a1.patch
+1413478-58a1.patch
+1360457-58a1.patch
+1412311-58a1.patch
+1411920-58a1.patch
+1412023-58a1.patch
+1412555-58a1.patch
+1413941-58a1.patch
+1413829-58a1.patch
+1373258-58a1.patch
+1407561-58a1.patch
+1404850-58a1.patch
+1408964-58a1.patch
+1282721-1-58a1.patch
+1282721-2-58a1.patch
+1412273-58a1.patch
+1412359-1-58a1.patch
+1412359-2-58a1.patch
+1413605-58a1.patch
+1403814-1-58a1.patch
+1403814-2-58a1.patch
+1403814-3-58a1.patch
+1403870-1-58a1.patch
+1403870-2-58a1.patch
+1412278-58a1.patch
+1410416-1-58a1.patch
+1410416-2-58a1.patch
+1413938-58a1.patch
+1409413-1-58a1.patch
+1409413-2-58a1.patch
+1409413-3-58a1.patch
+1414053-58a1.patch
+1413765-1-58a1.patch
+1413765-2-58a1.patch
+1415137-58a1.patch
+1413540-58a1.patch
+1400963-58a1.patch
+1408919-58a1.patch
+1408920-58a1.patch
+1406069-58a1.patch
+1403449-58a1.patch
+1401958-58a1.patch
+1408928-58a1.patch
+1414609-58a1.patch
+1408790-58a1.patch
+1412029-1only-58a1.patch
+1408198-58a1.patch
+1407891-1-58a1.patch
+1407891-2-58a1.patch
+1414981-58a1.patch
+1394841-1-58a1.patch
+1394841-2-58a1.patch
+1394841-3-58a1.patch
+1415502-58a1.patch
+1415728-58a1.patch
+1366531-58a1.patch
+1408337-58a1.patch
+1415919-58a1.patch
+1412608-58a1.patch
+1415300-58a1.patch
+1411402-58a1.patch
+1416358-58a1.patch
+1353319-1-59a1.patch
+1353319-2-59a1.patch
+1353319-3-59a1.patch
+1404176-59a1.patch
+1413860-59a1.patch
+1399125-59a1.patch
+1407178-59a1.patch
+1403452-59a1.patch
+1408926-59a1.patch
+1403899-59a1.patch
+1414159-59a1.patch
+1409651-59a1.patch
+1416704-59a1.patch
+1363957-59a1.patch
+1414275-1-59a1.patch
+1414275-2-59a1.patch
+1414275-3-59a1.patch
+1414362-59a1.patch
+1414124-59a1.patch
+1403977-1-59a1.patch
+1403977-2-59a1.patch
+1371293-3-59a1.patch
+1371293-4-59a1.patch
+1371293-5-59a1.patch
+1371293-7-59a1.patch
+1406287-1-59a1.patch
+1406287-2-59a1.patch
+1406287-3-59a1.patch
+1406287-4-59a1.patch
+1416193-59a1.patch
+1415554-59a1.patch
+1415612-59a1.patch
+1404917-1-59a1.patch
+1404917-2-59a1.patch
+1404917-3-59a1.patch
+1416194-59a1.patch
+1411645-59a1.patch
+1414447-59a1.patch
+1416960-59a1.patch
+1387511-1-59a1.patch
+1387511-2-59a1.patch
+1415167-59a1.patch
+1417368-59a1.patch
+1415650-59a1.patch
+1406030-59a1.patch
+1383711-59a1.patch
+1408339-2only-PARTIAL-59a1.patch
+1417512-59a1.patch
+1417462-59a1.patch
+1416105-59a1.patch
+1417501-59a1.patch
+1353716-59a1.patch
+1417035-59a1.patch
+1410351-59a1.patch
+1417483-59a1.patch
+1408927-59a1.patch
+1404400-59a1.patch
+1398229-3-59a1.patch
+1398229-2-59a1.patch
+1398229-1-59a1.patch
+1408970-59a1.patch
+1417444-59a1.patch
+1418250-59a1.patch
+1418320-59a1.patch
+1319597-59a1.patch
+1333254-59a1.patch
+1371936-59a1.patch
+1408929-59a1.patch
+1398229-4-59a1.patch
+1405008-59a1.patch
+1419059-59a1.patch
+1408930-59a1.patch
+1378524-59a1.patch
+1415205-1-59a1.patch
+1415205-2-59a1.patch
+1408182-59a1.patch
+1411889-59a1.patch
+1372115-59a1.patch
+1399242-1-59a1.patch
+1399242-2-59a1.patch
+1399242-3-59a1.patch
+1405288-1-59a1.patch
+1405288-2-59a1.patch
+1405288-3-59a1.patch
+1405288-4-59a1.patch
+1418808-59a1.patch
+1403871-1-59a1.patch
+1403871-2-59a1.patch
+1403871-3-59a1.patch
+1418274-59a1.patch
+1419447-59a1.patch
+1408401-59a1.patch
+1419665-59a1.patch
+1381648-59a1.patch
+1419416-59a1.patch
+1419075-59a1.patch
+1408944-59a1.patch
+1419382-1-59a1.patch
+1419382-2-59a1.patch
+1419382-3-59a1.patch
+1419382-4-59a1.patch
+1414318-59a1.patch
+1402633-59a1.patch
+1419536-1-59a1.patch
+1419536-2-59a1.patch
+1419536-3-59a1.patch
+1419536-4-59a1.patch
+1419536-5-59a1.patch
+1404929-59a1.patch
+1419792-59a1.patch
+1418477-1-59a1.patch
+1418477-2-59a1.patch
+1416201-1-59a1.patch
+1416201-2-59a1.patch
+1416201-3-59a1.patch
+1420037-1-59a1.patch
+1420037-2-59a1.patch
+1416711-1-59a1.patch
+1416711-2-59a1.patch
+1416711-3-59a1.patch
+1416711-4-59a1.patch
+1416711-5-59a1.patch
+1416711-6-59a1.patch
+1419410-59a1.patch
+1419787-59a1.patch
+1419487-59a1.patch
+1415532-1-59a1.patch
+1415532-2-59a1.patch
+1419734-59a1.patch
+1408931-59a1.patch
+1419426-59a1.patch
+1408947-59a1.patch
+1420179-59a1.patch
+1420273-59a1.patch
+1420272-59a1.patch
+1294873-59a1.patch
+1419407-59a1.patch
+1405350-59a1.patch
+1416928-1-59a1.patch
+1416928-2-59a1.patch
+1408938-59a1.patch
+1420711-59a1.patch
+1416394-59a1.patch
+1420451-59a1.patch
+1419471-59a1.patch
+1420221-59a1.patch
+1421242-59a1.patch
+1417805-59a1.patch
+1419533-59a1.patch
+1408946-59a1.patch
+1408945-59a1.patch
+1408943-59a1.patch
+1408948-59a1.patch
+1420395-59a1.patch
+1421066-59a1.patch
+1420604-59a1.patch
+1420743-1-59a1.patch
+1420743-2-59a1.patch
+1418066-59a1.patch
+1419076-59a1.patch
+1419087-59a1.patch
+1417439-59a1.patch
+1419828-59a1.patch
+1408941-59a1.patch
+1404851-59a1.patch
+1408942-59a1.patch
+1420419-1-59a1.patch
+1420419-2-59a1.patch
+1404928-59a1.patch
+1401548-59a1.patch
+1408124-59a1.patch
+1411565-59a1.patch
+1420233-59a1.patch
+1420303-59a1.patch
+1037335-1-59a1.patch
+1037335-2-59a1.patch
+1037335-3no4or5-59a1.patch
+1037335-6-59a1.patch
+1401942-1-59a1.patch
+1401942-2-59a1.patch
+1333140-2no1-59a1.patch
+1421582-59a1.patch
+1403536-59a1.patch
+1418928-59a1.patch
+1419367-59a1.patch
+1419368-59a1.patch
+1419405-59a1.patch
+1417039-59a1.patch
+1422258-59a1.patch
+1422265-59a1.patch
+1422282-59a1.patch
+1419801-59a1.patch
+1408936-59a1.patch
+1408937-59a1.patch
+1408935-59a1.patch
+1408940-59a1.patch
+1408939-59a1.patch
+1408934-59a1.patch
+1419301-59a1.patch
+1345433-1-59a1.patch
+1345433-2-59a1.patch
+1422314-59a1.patch
+1420594-1-59a1.patch
+1420594-2-59a1.patch
+1420594-3-59a1.patch
+1419592-59a1.patch
+1422983-59a1.patch
+1419369-59a1.patch
+1220758-59a1.patch
+1408949-1-59a1.patch
+1408949-2-59a1.patch
+1408949-3-59a1.patch
+1420954-1-59a1.patch
+1420954-2-59a1.patch
+1422584-59a1.patch
+1423328-59a1.patch
+1423412-1-59a1.patch
+1423412-2-59a1.patch
+1423412-3-59a1.patch
+1423412-4no5-59a1.patch
+1422341-59a1.patch
+1401944-59a1.patch
+1422218-1-59a1.patch
+1422218-2-59a1.patch
+1422218-3-59a1.patch
+1422218-4-59a1.patch
+1102464-1-59a1.patch
+1102464-2-59a1.patch
+1418376-59a1.patch
+1419925-59a1.patch
+1423502-59a1.patch
+1422841-1-59a1.patch
+1422841-2-59a1.patch
+1415056-1-59a1.patch
+1415056-2-59a1.patch
+1369945-59a1.patch
+1422470-59a1.patch
+1420499-59a1.patch
+1423961-59a1.patch
+1419336-1-59a1.patch
+1419336-2-59a1.patch
+1408933-59a1.patch
+1241131-1-59a1.patch
+1241131-2-59a1.patch
+1424025-59a1.patch
+1423913-1-59a1.patch
+1423913-2-59a1.patch
+1423913-3-59a1.patch
+1386613-1-59a1.patch
+1386613-2-59a1.patch
+1386613-3-59a1.patch
+1421663-59a1.patch
+1424362-59a1.patch
+1424338-1-59a1.patch
+1424338-2-59a1.patch
+1424338-3-59a1.patch
+1424338-4-59a1.patch
+1424338-5-59a1.patch
+1424338-6-59a1.patch
+1424338-7-59a1.patch
+1419401-59a1.patch
+1424658-59a1.patch
+1424809-59a1.patch
+1411622-59a1.patch
+1293277-1-59a1.patch
+1293277-2-59a1.patch
+1293277-3-59a1.patch
+1293277-4-59a1.patch
+1293277-5-59a1.patch
+1293277-6-59a1.patch
+1293277-7no8-59a1.patch
+1293277-9-59a1.patch
+1424916-59a1.patch
+1272969-59a1.patch
+1424669-59a1.patch
+1424943-59a1.patch
+1419479-59a1.patch
+1419078-59a1.patch
+1424275-59a1.patch
+1425270-59a1.patch
+1422815-59a1.patch
+1419083-59a1.patch
+1423158-59a1.patch
+1424949-1-59a1.patch
+1424949-2-59a1.patch
+1418927-1-59a1.patch
+1418927-2-59a1.patch
+1424162-59a1.patch
+1415472-59a1.patch
+1425704-59a1.patch
+1425318-1-59a1.patch
+1425318-2-59a1.patch
+1425318-3-59a1.patch
+1415574-59a1.patch
+1424721-59a1.patch
+1425614-1-59a1.patch
+1425614-2-59a1.patch
+1420622-59a1.patch
+1419086-59a1.patch
+1421491-59a1.patch
+1426251-59a1.patch
+1424452-59a1.patch
+1425876-59a1.patch
+1425316-1-59a1.patch
+1425316-2-59a1.patch
+1425316-3-59a1.patch
+1425316-4-59a1.patch
+1425316-5-59a1.patch
+1425316-6-59a1.patch
+1426253-1-59a1.patch
+1426253-2-59a1.patch
+1426253-3-59a1.patch
+1426253-4-59a1.patch
+1426018-59a1.patch
+1419366-59a1.patch
+1421992-4c-59a1.patch
+1426108-59a1.patch
+1420289-59a1.patch
+1425897-59a1.patch
+1365574-59a1.patch
+1402485-59a1.patch
+1425653-59a1.patch
+1425839-59a1.patch
+1426462-59a1.patch
+1227746-59a1.patch
+1424690-59a1.patch
+1427051-59a1.patch
+1426996-59a1.patch
+1427595-59a1.patch
+1425280-59a1.patch
+1405252-59a1.patch
+1408932-59a1.patch
+1425733-59a1.patch
+1425993-59a1.patch
+1426094-59a1.patch
+1426809-59a1.patch
+1419088-59a1.patch
+1421335-1-59a1.patch
+1421335-2-59a1.patch
+1426688-1-59a1.patch
+1426688-2-59a1.patch
+1428006-59a1.patch
+1404368-59a1.patch
+1408950-59a1.patch
+1426194-1-59a1.patch
+1426194-2-59a1.patch
+1426057-59a1.patch
+1425574-1-59a1.patch
+1425574-2-59a1.patch
+1425574-3-59a1.patch
+1425574-4-59a1.patch
+1425574-5-59a1.patch
+1425574-6-59a1.patch
+1425574-7-59a1.patch
+1425574-8-59a1.patch
+1425574-9-59a1.patch
+1406038-59a1.patch
+1427184-59a1.patch
+1424722-59a1.patch
+1426908-59a1.patch
+1151156-59a1.patch
+1426920-59a1.patch
+1428231-59a1.patch
+1428043-59a1.patch
+1406161-1-59a1.patch
+1406161-2-59a1.patch
+1406161-3-59a1.patch
+1406161-4-59a1.patch
+1406161-5-59a1.patch
+1406161-6-59a1.patch
+1427392-59a1.patch
+1427187-59a1.patch
+1398981-59a1.patch
+1425975-01-59a1.patch
+1425975-02-59a1.patch
+1425975-03-59a1.patch
+1425975-04-59a1.patch
+1425975-05-59a1.patch
+1425975-06-59a1.patch
+1425975-07no08-59a1.patch
+1425975-09-59a1.patch
+1425975-10-59a1.patch
+1425975-11-59a1.patch
+1425975-12-59a1.patch
+1425975-13-59a1.patch
+1425975-14-59a1.patch
+1425975-15-59a1.patch
+1425975-16-59a1.patch
+1425975-17-59a1.patch
+1425975-18-59a1.patch
+1425975-19-59a1.patch
+1427908-59a1.patch
+1396434-59a1.patch
+1404853-59a1.patch
+1306892-1-59a1.patch
+1428394-1-59a1.patch
+1428394-2-59a1.patch
+1405254-59a1.patch
+1405333-59a1.patch
+1408893-59a1.patch
+1428521-59a1.patch
+1393464-59a1.patch
+1428455-59a1.patch
+1419771-01-59a1.patch
+1419771-02-59a1.patch
+1419771-03-59a1.patch
+1419771-04-59a1.patch
+1419771-05-59a1.patch
+1419771-06-59a1.patch
+1419771-07-59a1.patch
+1419771-08-59a1.patch
+1419771-09-59a1.patch
+1419771-10-59a1.patch
+1419771-11-59a1.patch
+1419771-12-59a1.patch
+1419771-13-59a1.patch
+1419771-14-59a1.patch
+1419771-15-59a1.patch
+1419771-16-59a1.patch
+1419771-17-59a1.patch
+1419771-18-59a1.patch
+1419771-19-59a1.patch
+1419771-20-59a1.patch
+1419771-21-59a1.patch
+1419771-22-59a1.patch
+1426501-1-59a1.patch
+1426501-2-59a1.patch
+1426501-3-59a1.patch
+1426501-4-59a1.patch
+1306892-2-59a1.patch
+1427077-59a1.patch
+1424156-1-59a1.patch
+1424156-2-59a1.patch
+1424156-3-59a1.patch
+1424156-4-59a1.patch
+1428717-59a1.patch
+1414554-59a1.patch
+1426634-59a1.patch
+1404392-59a1.patch
+1428014-59a1.patch
+1428191-59a1.patch
+1407085-59a1.patch
+1381463-59a1.patch
+1401953-59a1.patch
+1398904-59a1.patch
+994559-59a1.patch
+1349483-1-59a1.patch
+1349483-2-59a1.patch
+1397366-59a1.patch
+1427677-1-59a1.patch
+1427677-2-59a1.patch
+1428925-59a1.patch
+1428650-59a1.patch
+1428652-1-59a1.patch
+1428652-2-59a1.patch
+1428652-3-59a1.patch
+1419771-24-59a1.patch
+1428777-59a1.patch
+1429254-59a1.patch
+1403907-59a1.patch
+1419370-59a1.patch
+1429238-59a1.patch
+1428725-59a1.patch
+1428429-59a1.patch
+1429174-1-59a1.patch
+1429174-2-59a1.patch
+1429174-3-59a1.patch
+1404849-59a1.patch
+1405636-59a1.patch
+1429599-59a1.patch
+1419326-59a1.patch
+1420934-59a1.patch
+1429721-59a1.patch
+1399897-1-59a1.patch
+1399897-2-59a1.patch
+1426250-1-59a1.patch
+1426250-2-59a1.patch
+1426250-3-59a1.patch
+1425965-1-59a1.patch
+1425965-2-59a1.patch
+1425965-3-59a1.patch
+1425965-4-59a1.patch
+1425965-5-59a1.patch
+1425965-6-59a1.patch
+1425965-7-59a1.patch
+1406841-59a1.patch
+1429271-59a1.patch
+1391277-59a1.patch
+1428722-1-59a1.patch
+1428722-2-59a1.patch
+1428722-3-59a1.patch
+1429982-59a1.patch
+1429656-59a1.patch
+1430001-59a1.patch
+1420811-59a1.patch
+1430237-59a1.patch
+1405340-59a1.patch
+1405341-59a1.patch
+1430547-59a1.patch
+1429365-59a1.patch
+1430329-59a1.patch
+1430758-59a1.patch
+1425964-1-59a1.patch
+1425964-2-59a1.patch
+1425273-1-59a1.patch
+1430770-59a1.patch
+1429121-1-59a1.patch
+1429121-2-59a1.patch
+1425273-2-59a1.patch
+1303171-59a1.patch
+1406039-59a1.patch
+1427006-59a1.patch
+1428685-59a1.patch
+1429908-59a1.patch
+1430799-59a1.patch
+1427718-59a1.patch
+1421213-1-59a1.patch
+1421213-2-59a1.patch
+1396666-59a1.patch
+1405637-59a1.patch
+1430745-59a1.patch
+1430703-59a1.patch
+1418243-1no2-59a1.patch
+1418243-3-59a1.patch
+1422061-59a1.patch
+1404378-59a1.patch
+1431282-59a1.patch
+1431105-59a1.patch
+1431334-59a1.patch
+1417446-59a1.patch
+1430773-59a1.patch
+1404371-59a1.patch
+1430855-59a1.patch
+1430299-59a1.patch
+1406285-01-59a1.patch
+1406285-02-59a1.patch
+1406285-03-59a1.patch
+1406285-04-59a1.patch
+1406285-05-59a1.patch
+1406285-06-59a1.patch
+1406285-07-59a1.patch
+1406285-08-59a1.patch
+1406285-09-59a1.patch
+1406285-10-59a1.patch
+1406285-11-59a1.patch
+1406285-12-59a1.patch
+1406285-13-59a1.patch
+1406285-14-59a1.patch
+1406285-15-59a1.patch
+1406285-16-59a1.patch
+1406285-17-59a1.patch
+1406285-18-59a1.patch
+1431204-1-59a1.patch
+1431204-2-59a1.patch
+1430776-59a1.patch
+1431327-59a1.patch
+1416104-00-59a1.patch
+1416104-01-59a1.patch
+1416104-02-59a1.patch
+1416104-03-59a1.patch
+1416104-04-59a1.patch
+1416104-05-59a1.patch
+1416104-06-59a1.patch
+1416104-07-59a1.patch
+1416104-08-59a1.patch
+1416104-09-59a1.patch
+1416104-10-59a1.patch
+1404384-59a1.patch
+1431236-59a1.patch
+1430925-59a1.patch
+1431740-59a1.patch
+1421389-59a1.patch
+1423007-1-59a1.patch
+1423007-2-59a1.patch
+1430408-1-59a1.patch
+1430408-2-59a1.patch
+1430383-59a1.patch
+1430871-60a1.patch
+servo-19830-60a1.patch
+1432134-60a1.patch
+1401062-1-60a1.patch
+1401062-2-60a1.patch
+1401062-3-60a1.patch
+1409672-60a1.patch
+1432061-60a1.patch
+1430654-1-60a1.patch
+1430654-2-60a1.patch
+1430654-3-60a1.patch
+1431760-60a1.patch
+1311177-60a1.patch
+1431395-60a1.patch
+1431457-60a1.patch
+1432112-60a1.patch
+1422820-1-60a1.patch
+816876-60a1.patch
+1432202-60a1.patch
+1431898-60a1.patch
+1431672-60a1.patch
+1418361-60a1.patch
+1430143-60a1.patch
+1426386-1-60a1.patch
+1426386-2-60a1.patch
+1426386-3-60a1.patch
+1428952-1-60a1.patch
+1428952-2-60a1.patch
+1428952-3-60a1.patch
+1428952-4-60a1.patch
+1432104-60a1.patch
+1415507-60a1.patch
+1432009-60a1.patch
+servo-19829-60a1.patch
+servo-19841-60a1.patch
+1430494-60a1.patch
+1431758-60a1.patch
+1421208-60a1.patch
+1335316-60a1.patch
+1064821-60a1.patch
+1414125-60a1.patch
+1431304-60a1.patch
+1429603-01-60a1.patch
+1429603-02-60a1.patch
+1429603-03-60a1.patch
+1429603-04-60a1.patch
+1429603-05-60a1.patch
+1429603-06-60a1.patch
+1429603-08-60a1.patch
+1429603-10-60a1.patch
+1424146-2-60a1.patch
+1424146-3-60a1.patch
+1424146-4-60a1.patch
+1424146-5-60a1.patch
+1424146-6-60a1.patch
+1414825-1-60a1.patch
+1393270-1-60a1.patch
+1393270-2-60a1.patch
+1393270-3-60a1.patch
+1393270-4-60a1.patch
+1393270-5-60a1.patch
+1430738-60a1.patch
+1431781-1-60a1.patch
+1431781-2-60a1.patch
+1431232-60a1.patch
+1431127-60a1.patch
+servo-19845-60a1.patch
+1431539-60a1.patch
+1430021-1-60a1.patch
+1430021-2-60a1.patch
+1430319-60a1.patch
+1430982-01-60a1.patch
+1430982-02-60a1.patch
+1430982-03-60a1.patch
+1430982-04-60a1.patch
+1430982-05-60a1.patch
+1430982-06-60a1.patch
+1430982-07-60a1.patch
+1430982-08-60a1.patch
+1430982-09-60a1.patch
+1430982-10-60a1.patch
+1430785-60a1.patch
+1431052-60a1.patch
+1411581-60a1.patch
+1431132-60a1.patch
+1431669-1-60a1.patch
+1431669-2-60a1.patch
+1431669-3-60a1.patch
+1431669-4-60a1.patch
+1431474-1-60a1.patch
+1431474-2-60a1.patch
+1345077-1only-60a1.patch
+servo-19842-60a1.patch
+servo-19838-60a1.patch
+servo-19850-60a1.patch
+1432463-60a1.patch
+1432635-60a1.patch
+1418969-60a1.patch
+1404883-60a1.patch
+1404884-60a1.patch
+1432637-60a1.patch
+1404482-60a1.patch
+1432733-60a1.patch
+1431776-1-60a1.patch
+1431776-2-60a1.patch
+1431776-3-60a1.patch
+1432212-1-60a1.patch
+1432212-2-60a1.patch
+1432212-3-60a1.patch
+1431842-60a1.patch
+1432811-60a1.patch
+1428774-60a1.patch
+1432414-60a1.patch
+1432187-1-60a1.patch
+1432187-2-60a1.patch
+1432187-3-60a1.patch
+1431912-1-60a1.patch
+1431912-2-60a1.patch
+1386523-60a1.patch
+1428863-12-60a1.patch
+1429390-60a1.patch
+1431122-1-60a1.patch
+1431122-2-60a1.patch
+1393907-60a1.patch
+1419528-60a1.patch
+1422288-1-60a1.patch
+1422288-2-60a1.patch
+1432316-60a1.patch
+1432472-60a1.patch
+1432378-60a1.patch
+1432314-60a1.patch
+1432318-60a1.patch
+1432346-60a1.patch
+1431874-60a1.patch
+1126437-1-60a1.patch
+1126437-2-60a1.patch
+1386019-1-60a1.patch
+1386019-2-60a1.patch
+1386019-3-60a1.patch
+1432393-60a1.patch
+1432479-60a1.patch
+1425547-60a1.patch
+1429763-60a1.patch
+1429373-1-60a1.patch
+1429373-2-60a1.patch
+1429373-3-60a1.patch
+1432954-60a1.patch
+1432528-1-60a1.patch
+1432528-2-60a1.patch
+1432528-3-60a1.patch
+1432528-4-60a1.patch
+1432715-60a1.patch
+1422234-1only-60a1.patch
+1432813-60a1.patch
+1432851-60a1.patch
+1425577-60a1.patch
+1429819-60a1.patch
+1412320-60a1.patch
+1430446-60a1.patch
+1432516-1-60a1.patch
+1432516-2-60a1.patch
+1432516-3-60a1.patch
+1431866-60a1.patch
+1432553-60a1.patch
+1431864-60a1.patch
+1431025-60a1.patch
+1431049-60a1.patch
+1370881-60a1.patch
+1272774-1-60a1.patch
+1272774-2-60a1.patch
+1272774-3-60a1.patch
+1272774-4-60a1.patch
+1272774-5-60a1.patch
+1432834-60a1.patch
+1421225-60a1.patch
+1404888-60a1.patch
+1432520-60a1.patch
+1431402-1-60a1.patch
+1431402-2-60a1.patch
+1430161-60a1.patch
+1412238-1-60a1.patch
+1433056-60a1.patch
+1433123-60a1.patch
+1433065-60a1.patch
+1431096-60a1.patch
+1431173-60a1.patch
+1432956-1-60a1.patch
+1398149-60a1.patch
+1255378-1-60a1.patch
+1255378-2-60a1.patch
+1432541-1-60a1.patch
+1432541-2-60a1.patch
+1408792-60a1.patch
+servo-19854-60a1.patch
+servo-19868-60a1.patch
+1429759-60a1.patch
+1428530-60a1.patch
+1430628-60a1.patch
+1428234-1-60a1.patch
+1428234-2-60a1.patch
+1426831-60a1.patch
+1417358-60a1.patch
+1425691-60a1.patch
+1432842-1-60a1.patch
+1432842-2-60a1.patch
+1422635-60a1.patch
+1430442-1-60a1.patch
+1430442-2-60a1.patch
+1433404-60a1.patch
+1431024-60a1.patch
+1432865-60a1.patch
+1420112-60a1.patch
+1433100-60a1.patch
+1428698-60a1.patch
+1431217-60a1.patch
+1432923-60a1.patch
+1426721-1-60a1.patch
+1432789-1-60a1.patch
+1432789-2-60a1.patch
+1432850-60a1.patch
+servo-19877-60a1.patch
+1419508-60a1.patch
+1433101-1-60a1.patch
+1433101-2-60a1.patch
+1431855-60a1.patch
+1433492-1-60a1.patch
+1433492-2-60a1.patch
+1433098-60a1.patch
+1323743-1-60a1.patch
+1323743-3-60a1.patch
+1323743-4-60a1.patch
+1323743-5-1-60a1.patch
+1323743-5-2-60a1.patch
+1323743-6-60a1.patch
+1433139-1-60a1.patch
+1433139-2-60a1.patch
+1419764-1-60a1.patch
+1433551-60a1.patch
+1433576-60a1.patch
+1412066-60a1.patch
+685236-5-60a1.patch
+685236-7-60a1.patch
+1419764-2-60a1.patch
+1382251-01-60a1.patch
+1382251-02no03to06-60a1.patch
+1382251-07no08or09-PARTIAL-60a1.patch
+1382251-10no11-60a1.patch
+1423878-60a1.patch
+1428170-60a1.patch
+1433591-1only-60a1.patch
+1415563-60a1.patch
+1429411-60a1.patch
+servo-19881-60a1.patch
+1415780-01-60a1.patch
+1415780-02-60a1.patch
+1415780-03-60a1.patch
+1415780-04-60a1.patch
+1415780-05-60a1.patch
+1415780-06-60a1.patch
+1415780-07-60a1.patch
+1415780-08-60a1.patch
+1415780-09-60a1.patch
+1415780-10-60a1.patch
+1415780-11-60a1.patch
+1415780-12-60a1.patch
+1415780-13-60a1.patch
+1424880-60a1.patch
+1421395-60a1.patch
+1433810-60a1.patch
+1428453-06-60a1.patch
+1433345-1-60a1.patch
+1433345-2-60a1.patch
+1433345-3-60a1.patch
+1433345-4-60a1.patch
+1397740-60a1.patch
+1432771-60a1.patch
+1430979-60a1.patch
+1404477-1-60a1.patch
+1404477-2-60a1.patch
+1432552-1-60a1.patch
+1432552-2-60a1.patch
+1432552-3-60a1.patch
+1432552-4-60a1.patch
+1433402-60a1.patch
+1426519-1only-PARTIAL-60a1.patch
+1420910-1-60a1.patch
+1420910-2-60a1.patch
+1424978-60a1.patch
+1433837-1-60a1.patch
+1433837-2-60a1.patch
+1433837-3-60a1.patch
+1433837-4-60a1.patch
+1433597-60a1.patch
+1433497-60a1.patch
+1430817-1-60a1.patch
+1430817-2-60a1.patch
+1430817-3-60a1.patch
+1411977-1-60a1.patch
+1411977-2-60a1.patch
+1411977-3-60a1.patch
+1411977-4-60a1.patch
+1411977-5-60a1.patch
+1411977-6-60a1.patch
+1297480-60a1.patch
+servo-19851-60a1.patch
+servo-19878-60a1.patch
+1433501-1-60a1.patch
+1433501-2-60a1.patch
+1420975-60a1.patch
+1433846-1-60a1.patch
+1433846-2-60a1.patch
+1433846-3-60a1.patch
+1433850-60a1.patch
+1433008-1-60a1.patch
+1433008-2-60a1.patch
+1430258-60a1.patch
+1411129-60a1.patch
+1432968-60a1.patch
+1432348-60a1.patch
+1427229-60a1.patch
+1432186-13-PARTIAL-60a1.patch
+1407347-60a1.patch
+1432869-1-60a1.patch
+1432869-2-60a1.patch
+1432869-3-60a1.patch
+1432869-4-60a1.patch
+1432869-5-60a1.patch
+1432869-6-60a1.patch
+1432869-7-60a1.patch
+servo-19824-60a1.patch
+1406274-60a1.patch
+1433671-1-60a1.patch
+1280162-1-60a1.patch
+1434171-60a1.patch
+1433117-60a1.patch
+1425340-60a1.patch
+1434219-60a1.patch
+1255379-60a1.patch
+1433567-1-60a1.patch
+1433567-2-60a1.patch
+1421380-1-60a1.patch
+servo-19902-60a1.patch
+1434202-60a1.patch
+1102240-1-60a1.patch
+1102240-2-60a1.patch
+1102240-3-60a1.patch
+1413314-60a1.patch
+1430993-1-60a1.patch
+1430993-2-60a1.patch
+1434328-60a1.patch
+1433139-3-60a1.patch
+1434270-60a1.patch
+1426146-1-60a1.patch
+1426146-2no3-60a1.patch
+1432794-60a1.patch
+1431533-5aa-60a1.patch
+1356331-1-60a1.patch
+1356331-2-60a1.patch
+1422393-60a1.patch
+1434293-60a1.patch
+1433971-60a1.patch
+1432320-1-60a1.patch
+1432320-2-60a1.patch
+1434410-60a1.patch
+1387632-60a1.patch
+1207734-01a-60a1.patch
+1207734-01b-60a1.patch
+1207734-01c-60a1.patch
+1207734-01d-60a1.patch
+1207734-02-60a1.patch
+1207734-03a-60a1.patch
+1207734-03b-60a1.patch
+1207734-04a-60a1.patch
+1207734-04b-60a1.patch
+1207734-04c-60a1.patch
+1207734-05-60a1.patch
+1207734-06-60a1.patch
+1433982-60a1.patch
+1434306-60a1.patch
+1431209-1-60a1.patch
+1431209-2-60a1.patch
+1431209-3-60a1.patch
+1433062-1-60a1.patch
+1433062-2-60a1.patch
+1433062-3-60a1.patch
+1433062-4-60a1.patch
+1411857-60a1.patch
+1432341-1-60a1.patch
+1432341-2-60a1.patch
+1432341-3-60a1.patch
+1432341-4-60a1.patch
+1408294-1-60a1.patch
+1408294-2-60a1.patch
+1408294-3-60a1.patch
+1408294-4-60a1.patch
+1408294-5-60a1.patch
+1408294-6-60a1.patch
+1408294-7-60a1.patch
+1299515-01-60a1.patch
+1299515-02-60a1.patch
+1299515-03-60a1.patch
+1299515-04-60a1.patch
+1299515-05-60a1.patch
+1299515-06-60a1.patch
+1299515-07-60a1.patch
+1299515-08-60a1.patch
+1299515-09-60a1.patch
+1299515-10-60a1.patch
+1299515-11-60a1.patch
+1299515-12-60a1.patch
+1299515-13-60a1.patch
+1299515-14-60a1.patch
+1299515-15-60a1.patch
+1299515-16-60a1.patch
+1299515-17-60a1.patch
+1299515-18-60a1.patch
+1299515-19-60a1.patch
+1299515-20-60a1.patch
+1299515-21-60a1.patch
+1299515-22-60a1.patch
+1299515-23-60a1.patch
+1299515-24-60a1.patch
+1299515-25-60a1.patch
+1426718-60a1.patch
+1431698-1-60a1.patch
+1431698-2-60a1.patch
+1320353-60a1.patch
+1425583-1-60a1.patch
+1425583-2-60a1.patch
+1425583-3-60a1.patch
+1434628-60a1.patch
+1433579-60a1.patch
+servo-19465-60a1.patch
+servo-19906-60a1.patch
+servo-19911-60a1.patch
+servo-19914-60a1.patch
+1255380-60a1.patch
+servo-19915-60a1.patch
+1420485-1-60a1.patch
+1420485-2-60a1.patch
+1420485-3-60a1.patch
+1420485-4-60a1.patch
+1420485-5-60a1.patch
+1429915-60a1.patch
+1433715-60a1.patch
+1433265-60a1.patch
+1434217-1-60a1.patch
+1434217-2-60a1.patch
+1434217-3-60a1.patch
+1269527-60a1.patch
+1419328-60a1.patch
+1134540-60a1.patch
+1434279-60a1.patch
+1434267-60a1.patch
+1433496-60a1.patch
+1434546-60a1.patch
+1433432-60a1.patch
+1432168-1-60a1.patch
+1432168-2-60a1.patch
+1432168-3-60a1.patch
+1434025-60a1.patch
+1434318-01-60a1.patch
+1434318-02-60a1.patch
+1434169-1-60a1.patch
+1434169-2-60a1.patch
+1434514-60a1.patch
+1420026-5no4-60a1.patch
+1430014-1-60a1.patch
+1430014-2-60a1.patch
+1430014-3-60a1.patch
+1430014-4-60a1.patch
+1430014-5-60a1.patch
+1430014-6-60a1.patch
+1255369-60a1.patch
+1432309-60a1.patch
+1434288-1-60a1.patch
+1434288-2-60a1.patch
+servo-19859-60a1.patch
+servo-19912-60a1.patch
+1434747-60a1.patch
+1430949-60a1.patch
+1213998-60a1.patch
+1207734-09a-60a1.patch
+1207734-09b-60a1.patch
+1207734-09e-60a1.patch
+1207734-09f-60a1.patch
+1207734-09i-60a1.patch
+1207734-10-60a1.patch
+1426054-60a1.patch
+1432803-1-60a1.patch
+1432803-2-60a1.patch
+1426906-60a1.patch
+1433344-60a1.patch
+1403334-1-60a1.patch
+servo-19903-60a1.patch
+1434724-60a1.patch
+servo-19918-60a1.patch
+1434474-60a1.patch
+1431459-60a1.patch
+1419293-60a1.patch
+1430793-60a1.patch
+1434524-60a1.patch
+1434697-2-60a1.patch
+1434699-60a1.patch
+1386404-1-60a1.patch
+1386404-2-60a1.patch
+1386404-3-60a1.patch
+1386404-4-60a1.patch
+1386404-5-60a1.patch
+1386404-6-60a1.patch
+1386404-7-60a1.patch
+1417388-60a1.patch
+1434622-60a1.patch
+1434224-60a1.patch
+1434835-60a1.patch
+1434790-60a1.patch
+1433837-5-60a1.patch
+1433837-6-60a1.patch
+1434263-60a1.patch
+1434295-60a1.patch
+1423582-60a1.patch
+servo-19923-60a1.patch
+servo-19924-60a1.patch
+servo-19529-60a1.patch
+1174091-60a1.patch
+1431867-1-60a1.patch
+1431867-2-60a1.patch
+1434803-60a1.patch
+1434686-1-60a1.patch
+1434686-2-60a1.patch
+1434686-3-60a1.patch
+1434686-4-60a1.patch
+1417380-1-60a1.patch
+1417380-2-60a1.patch
+1339461-1a-60a1.patch
+servo-19927-60a1.patch
+1434429-1-60a1.patch
+1434429-2-60a1.patch
+1434429-3-60a1.patch
+1434429-4-60a1.patch
+1434429-5-60a1.patch
+1434988-60a1.patch
+1435022-01-60a1.patch
+1435022-02-60a1.patch
+1435022-03-60a1.patch
+1435022-04-60a1.patch
+1435022-05-60a1.patch
+1435022-06-60a1.patch
+1435022-07-60a1.patch
+1435022-08-60a1.patch
+1435022-09-60a1.patch
+1435022-10-60a1.patch
+1435022-11-60a1.patch
+1435022-12-60a1.patch
+1434981-60a1.patch
+1430916-60a1.patch
+1434225-60a1.patch
+1433849-60a1.patch
+1207734-11-60a1.patch
+1434769-60a1.patch
+1434958-60a1.patch
+1435002-60a1.patch
+1435244-60a1.patch
+1435366-60a1.patch
+1435180-60a1.patch
+1435307-60a1.patch
+1435286-60a1.patch
+1435382-60a1.patch
+1431461-60a1.patch
+1434789-1-60a1.patch
+1434789-2-60a1.patch
+1435187-60a1.patch
+1435228-60a1.patch
+1434689-2-60a1.patch
+1434689-3-60a1.patch
+1434689-4-60a1.patch
+1435219-60a1.patch
+1435262-60a1.patch
+1435015-60a1.patch
+1435200-60a1.patch
+servo-19935-60a1.patch
+servo-19938-60a1.patch
+servo-19945-60a1.patch
+1435618-1-60a1.patch
+1435618-2-60a1.patch
+1433389-60a1.patch
+1435214-60a1.patch
+servo-19953-60a1.patch
+servo-19954-60a1.patch
+servo-19955-60a1.patch
+1435282-1-60a1.patch
+1435282-2-60a1.patch
+1435282-3-60a1.patch
+1435282-4-60a1.patch
+1435297-1-60a1.patch
+1435297-2-60a1.patch
+1435175-60a1.patch
+1434969-60a1.patch
+1392996-1only-60a1.patch
+1167238-1-60a1.patch
+1167238-2-60a1.patch
+1167238-3-60a1.patch
+1167238-4-60a1.patch
+1167238-5-60a1.patch
+1167238-6-60a1.patch
+1435406-60a1.patch
+1435814-60a1.patch
+1433139-4-60a1.patch
+1431813-1-60a1.patch
+1431813-2-60a1.patch
+1431813-3-60a1.patch
+1435149-1-60a1.patch
+1435149-2-60a1.patch
+1432599-1-60a1.patch
+1431561-60a1.patch
+NOBUG-20180206-jsgdb-60a1.patch
+1435220-60a1.patch
+1435293-60a1.patch
+1435673-1-60a1.patch
+1435673-2-60a1.patch
+1435673-3-60a1.patch
+1435673-4-60a1.patch
+1434600-1-60a1.patch
+1434600-2-60a1.patch
+1434600-3-60a1.patch
+1434723-1-60a1.patch
+1434723-2-60a1.patch
+1434723-3-60a1.patch
+1434723-4-60a1.patch
+1362115-1-60a1.patch
+1362115-2-60a1.patch
+1362115-3-60a1.patch
+servo-19933-60a1.patch
+servo-19948-60a1.patch
+servo-19956-60a1.patch
+1435701-60a1.patch
+1422163-1-60a1.patch
+1422163-2-60a1.patch
+1435084-60a1.patch
+1433655-60a1.patch
+1432381-60a1.patch
+1435325-60a1.patch
+1414825-2-60a1.patch
+1432956-2-60a1.patch
+1435756-60a1.patch
+1435295-60a1.patch
+1435249-60a1.patch
+1435570-60a1.patch
+1425580-01-60a1.patch
+1425580-02-60a1.patch
+1425580-03-60a1.patch
+1425580-03a-60a1.patch
+1434953-1-60a1.patch
+1434953-2-60a1.patch
+1434979-60a1.patch
+1435001-60a1.patch
+1432992-1a-60a1.patch
+1432992-1b-60a1.patch
+1436134-60a1.patch
+1348959-1-60a1.patch
+1348959-2-60a1.patch
+1348959-3-60a1.patch
+1431179-1-60a1.patch
+1431179-2-60a1.patch
+1431179-3-60a1.patch
+servo-19957-60a1.patch
+servo-19964-60a1.patch
+servo-19966-60a1.patch
+servo-19969-60a1.patch
+servo-19970-60a1.patch
+1436084-1-60a1.patch
+1436084-2-60a1.patch
+1419339-60a1.patch
+1432759-60a1.patch
+1420838-2-60a1.patch
+1420838-3-60a1.patch
+1420838-4-60a1.patch
+1431202-1-60a1.patch
+1431202-2-60a1.patch
+1435730-1-60a1.patch
+1435730-2-60a1.patch
+1399158-60a1.patch
+1403334-2-60a1.patch
+1434861-60a1.patch
+1434946-1-60a1.patch
+1434946-2-60a1.patch
+1434946-3-60a1.patch
+1418930-1-60a1.patch
+1418930-2-60a1.patch
+1418930-3-60a1.patch
+1418930-4-60a1.patch
+1418930-5-60a1.patch
+1418930-6-60a1.patch
+servo-19931-60a1.patch
+servo-19973-60a1.patch
+1435248-1-60a1.patch
+1435248-2-60a1.patch
+1435248-3-60a1.patch
+1435939-1-60a1.patch
+1435939-2-60a1.patch
+1435939-3-60a1.patch
+1435939-4-60a1.patch
+1428072-1-60a1.patch
+1230369-1a-60a1.patch
+1383682-1-60a1.patch
+1383682-2-60a1.patch
+1383682-3-60a1.patch
+1435209-60a1.patch
+1436065-60a1.patch
+1435796-60a1.patch
+1435525-60a1.patch
+1436353-1-60a1.patch
+1436353-2-60a1.patch
+1436353-3-60a1.patch
+1435266-60a1.patch
+1436210-60a1.patch
+1436343-60a1.patch
+1392391-1-60a1.patch
+1392391-2-60a1.patch
+1392391-3-60a1.patch
+1392391-4-60a1.patch
+1392391-5-60a1.patch
+1392391-6-60a1.patch
+servo-19974-60a1.patch
+servo-19981-60a1.patch
+1436279-1-60a1.patch
+1436279-2-60a1.patch
+1385998-1-60a1.patch
+1385998-2-60a1.patch
+1436076-1-60a1.patch
+1436076-2-60a1.patch
+1436076-3-60a1.patch
+1435320-60a1.patch
+1435143-60a1.patch
+1436265-60a1.patch
+1435624-60a1.patch
+1435185-60a1.patch
+1436272-60a1.patch
+1432678-60a1.patch
+1432679-60a1.patch
+1431900-60a1.patch
+1433959-60a1.patch
+1435146-60a1.patch
+1436185-60a1.patch
+1436541-60a1.patch
+servo-19984-60a1.patch
+servo-19985-60a1.patch
+1435803-60a1.patch
+1430857-1-60a1.patch
+1430857-2-60a1.patch
+1436216-60a1.patch
+1434218-60a1.patch
+1434884-60a1.patch
+1436362-60a1.patch
+1436190-60a1.patch
+1433932-60a1.patch
+1435321-60a1.patch
+1404710-60a1.patch
+1436792-1-60a1.patch
+1436792-2-60a1.patch
+1436725-60a1.patch
+1420322-60a1.patch
+1429338-1-60a1.patch
+1429338-2-60a1.patch
+1376910-3-60a1.patch
+1425274-60a1.patch
+1436790-60a1.patch
+1436684-60a1.patch
+1373558-60a1.patch
+1267462-01-60a1.patch
+1267462-02-60a1.patch
+1267462-03-60a1.patch
+1267462-04-60a1.patch
+1267462-05-60a1.patch
+1267462-06-60a1.patch
+1267462-07-60a1.patch
+1267462-08-60a1.patch
+1267462-09-60a1.patch
+1267462-10-60a1.patch
+1436841-60a1.patch
+1436832-1-60a1.patch
+1436832-2-60a1.patch
+1436295-60a1.patch
+1435090-1-60a1.patch
+1435090-2-60a1.patch
+1434230-1-60a1.patch
+1434230-2-60a1.patch
+1434230-3-60a1.patch
+1434243-1-60a1.patch
+1434243-2-60a1.patch
+1434243-3-60a1.patch
+1434243-4-60a1.patch
+1404364-60a1.patch
+1404886-60a1.patch
+1416179-2-60a1.patch
+1389988-60a1.patch
+1435456-60a1.patch
+1432599-2-60a1.patch
+1425580-04-60a1.patch
+1425580-05-60a1.patch
+1319203-1-60a1.patch
+1319203-2-60a1.patch
+1319203-3-60a1.patch
+1319203-4-60a1.patch
+1319203-5-60a1.patch
+1382458-60a1.patch
+1432764-60a1.patch
+1433552-60a1.patch
+1435670-60a1.patch
+1436882-60a1.patch
+1432411-60a1.patch
+servo-20001-60a1.patch
+servo-20003-60a1.patch
+1374166-60a1.patch
+1416824-1-60a1.patch
+1416824-2-60a1.patch
+1416824-3-60a1.patch
+1416824-4-60a1.patch
+1406022-60a1.patch
+1436831-1-60a1.patch
+1436831-2-60a1.patch
+1434230-4-60a1.patch
+1433111-1-60a1.patch
+1433111-2-60a1.patch
+1436893-60a1.patch
+1435025-60a1.patch
+servo-19980-60a1.patch
+NOBUG-20180210-debug_unreachable-60a1.patch
+servo-20004-60a1.patch
+1434996-60a1.patch
+1434250-1-60a1.patch
+1434250-2-60a1.patch
+1434250-3-60a1.patch
+1434250-4-60a1.patch
+1425243-1-60a1.patch
+1425243-2-60a1.patch
+1425243-3-60a1.patch
+1429768-60a1.patch
+1415443-60a1.patch
+servo-20011-60a1.patch
+servo-20010-60a1.patch
+1435139-60a1.patch
+servo-20013-60a1.patch
+1436742-60a1.patch
+1436743-60a1.patch
+1429508-1-60a1.patch
+1429508-2-60a1.patch
+1429508-3-60a1.patch
+1437184-60a1.patch
+1437248-60a1.patch
+1405650-60a1.patch
+servo-20014-60a1.patch
+1426063-60a1.patch
+1436663-60a1.patch
+1435684-60a1.patch
+1429603-12-60a1.patch
+1429603-13-60a1.patch
+1435643-60a1.patch
+1435650-60a1.patch
+1435649-60a1.patch
+1429932-1-60a1.patch
+1429932-2-60a1.patch
+1429932-3-60a1.patch
+1429932-4-60a1.patch
+1429932-5-60a1.patch
+1429932-6-60a1.patch
+1429932-7-60a1.patch
+servo-20017-60a1.patch
+1394233-2-60a1.patch
+servo-20016-60a1.patch
+servo-20018-60a1.patch
+servo-20019-60a1.patch
+servo-20026-60a1.patch
+1437484-60a1.patch
+servo-20025-60a1.patch
+servo-20027-60a1.patch
+1436058-1-60a1.patch
+1436058-2-60a1.patch
+1436058-3-60a1.patch
+1436058-4-60a1.patch
+1436058-5-60a1.patch
+1169290-01-60a1.patch
+1169290-02-60a1.patch
+1169290-03-60a1.patch
+1169290-04-60a1.patch
+1169290-05-60a1.patch
+1169290-06-60a1.patch
+1169290-07-60a1.patch
+1169290-08-60a1.patch
+1169290-09-60a1.patch
+1169290-10-60a1.patch
+1169290-11-60a1.patch
+1407693-1-60a1.patch
+1407693-2-60a1.patch
+785440-2-60a1.patch
+1437028-60a1.patch
+1430918-1-60a1.patch
+1430918-2-60a1.patch
+1405641-60a1.patch
+1406028-60a1.patch
+1404832-1-60a1.patch
+1404832-2-60a1.patch
+1403200-60a1.patch
+1403205-60a1.patch
+1403196-60a1.patch
+1437152-1-60a1.patch
+1437152-2-60a1.patch
+1435938-1-60a1.patch
+1435938-2-60a1.patch
+1432375-1-60a1.patch
+1432375-2-60a1.patch
+1435296-1-60a1.patch
+1435296-2-60a1.patch
+1435296-3-60a1.patch
+1435296-4-60a1.patch
+1435296-5-60a1.patch
+1435296-6-60a1.patch
+1435296-7-60a1.patch
+1436697-60a1.patch
+1422043-1-60a1.patch
+1436773-1-60a1.patch
+1436773-2-60a1.patch
+1437125-60a1.patch
+1425580-06-60a1.patch
+1425580-07-60a1.patch
+1436983-60a1.patch
+servo-20033-60a1.patch
+1237454-1-60a1.patch
+1237454-2-60a1.patch
+1237454-3-60a1.patch
+1237454-4-60a1.patch
+1237454-5-60a1.patch
+1237454-6-60a1.patch
+1237454-7-60a1.patch
+1437625-60a1.patch
+1430919-60a1.patch
+1434429-6-60a1.patch
+1434429-7-60a1.patch
+1428453-07-60a1.patch
+1428453-08-60a1.patch
+1428453-09-60a1.patch
+1428453-10-60a1.patch
+1436150-60a1.patch
+1429647-60a1.patch
+1425580-08-60a1.patch
+1425580-09-60a1.patch
+1437481-60a1.patch
+1437471-60a1.patch
+1434544-60a1.patch
+1434565-60a1.patch
+1437795-60a1.patch
+1436110-1-60a1.patch
+1436110-2-60a1.patch
+1436110-3-60a1.patch
+1436978-60a1.patch
+1404359-60a1.patch
+1404844-60a1.patch
+1437802-60a1.patch
+servo-19925-60a1.patch
+NOBUG-20180214-revendor-60a1.patch
+1436639-60a1.patch
+1231203-60a1.patch
+1435984-1-60a1.patch
+1435984-2-60a1.patch
+1435984-3-60a1.patch
+1435984-4-60a1.patch
+1435984-5-60a1.patch
+1435984-6-60a1.patch
+1435984-7-60a1.patch
+1435984-9-60a1.patch
+servo-20022-60a1.patch
+NOBUG-20180214-darling-60a1.patch
+servo-20039-60a1.patch
+servo-20038-60a1.patch
+servo-20040-60a1.patch
+servo-20042-60a1.patch
+servo-20044-60a1.patch
+1437949-1-60a1.patch
+1436625-60a1.patch
+1437623-1-60a1.patch
+1437623-2-60a1.patch
+1437623-3-60a1.patch
+1436415-1-60a1.patch
+1436415-2-60a1.patch
+1437723-60a1.patch
+1429150-2-60a1.patch
+1437548-1-60a1.patch
+1437548-2-60a1.patch
+1437548-3-60a1.patch
+1434155-1-60a1.patch
+1434155-2-60a1.patch
+1437856-60a1.patch
+1403454-60a1.patch
+1436926-1-60a1.patch
+1436926-2-60a1.patch
+1418469-60a1.patch
+1436723-1-60a1.patch
+1436723-2-60a1.patch
+1437750-60a1.patch
+1437309-60a1.patch
+1437554-60a1.patch
+1344613-60a1.patch
+1428442-60a1.patch
+1437978-60a1.patch
+1437501-60a1.patch
+1437499-60a1.patch
+1428431-60a1.patch
+1428432-1-60a1.patch
+1428432-2-60a1.patch
+1428432-3-60a1.patch
+1428436-60a1.patch
+1431056-60a1.patch
+1437832-1-60a1.patch
+1437832-2-60a1.patch
+1437832-3-60a1.patch
+1437832-4-60a1.patch
+1436759-60a1.patch
+servo-20046-60a1.patch
+servo-20049-60a1.patch
+1429962-60a1.patch
+1437965-60a1.patch
+1436659-09no01to08-60a1.patch
+1436659-10-60a1.patch
+1436659-11-60a1.patch
+1436659-12-60a1.patch
+1436659-13-60a1.patch
+1436659-14-60a1.patch
+1434846-1-60a1.patch
+1434846-2-60a1.patch
+1438020-60a1.patch
+1406726-60a1.patch
+1438055-60a1.patch
+1437427-60a1.patch
+1311171-60a1.patch
+1403450-60a1.patch
+1435368-60a1.patch
+1436690-1-60a1.patch
+1436690-2-60a1.patch
+1436690-3-60a1.patch
+1436690-4-60a1.patch
+1436690-5-60a1.patch
+1429212-60a1.patch
+1437267-60a1.patch
+1429206-1-60a1.patch
+1429206-3no2-60a1.patch
+1429206-4-60a1.patch
+1429206-5-60a1.patch
+1429206-6-60a1.patch
+1429206-7-60a1.patch
+1429206-8-60a1.patch
+903519-01-60a1.patch
+903519-02-60a1.patch
+903519-03-60a1.patch
+903519-04-60a1.patch
+903519-05-60a1.patch
+903519-06-60a1.patch
+903519-07-60a1.patch
+903519-08-60a1.patch
+903519-09-60a1.patch
+903519-10-60a1.patch
+903519-11-60a1.patch
+903519-12-60a1.patch
+903519-13-60a1.patch
+903519-14-60a1.patch
+903519-15-60a1.patch
+903519-16-60a1.patch
+903519-17-60a1.patch
+903519-18-60a1.patch
+903519-19-60a1.patch
+903519-20-60a1.patch
+1436020-60a1.patch
+1433646-60a1.patch
+1437571-2-60a1.patch
+1407588-1-60a1.patch
+1407588-2-60a1.patch
+1407588-3-60a1.patch
+1407588-4-60a1.patch
+1407588-5-60a1.patch
+1407588-6-60a1.patch
+1438073-60a1.patch
+1437055-60a1.patch
+1428443-60a1.patch
+1431015-60a1.patch
+1437534-60a1.patch
+1437546-60a1.patch
+1437780-1-60a1.patch
+1425580-10-60a1.patch
+1438126-1-60a1.patch
+1438126-2-60a1.patch
+1438126-3-60a1.patch
+1437602-1-60a1.patch
+1437602-2-60a1.patch
+1437602-3-60a1.patch
+1437926-60a1.patch
+1437491-60a1.patch
+1437448-60a1.patch
+1435369-60a1.patch
+1438251-60a1.patch
+1438502-60a1.patch
+1438232-60a1.patch
+1437731-60a1.patch
+1437970-60a1.patch
+1428453-11-60a1.patch
+1428453-12-60a1.patch
+1428453-13-60a1.patch
+1422043-2-60a1.patch
+1422043-3-60a1.patch
+1422043-4-60a1.patch
+1422043-5-60a1.patch
+1435569-1-60a1.patch
+1435569-2-60a1.patch
+1425580-11-60a1.patch
+1425580-12-60a1.patch
+1438670-60a1.patch
+servo-20047-60a1.patch
+712130-1-60a1.patch
+712130-2-60a1.patch
+712130-3-60a1.patch
+712130-4-60a1.patch
+1438035-1-60a1.patch
+1438035-2-60a1.patch
+1438097-60a1.patch
+1422160-60a1.patch
+1416106-01-60a1.patch
+1416106-02-60a1.patch
+1416106-03-60a1.patch
+1416106-04-60a1.patch
+1416106-05-60a1.patch
+1416106-06-60a1.patch
+1416106-07-60a1.patch
+1416106-08-60a1.patch
+1416106-09-60a1.patch
+1416106-10-60a1.patch
+1416106-11-60a1.patch
+1416106-12-60a1.patch
+1416106-13-60a1.patch
+1429803-1-60a1.patch
+1429803-2-60a1.patch
+1405245-1-60a1.patch
+1405245-2-60a1.patch
+1405647-60a1.patch
+1405648-60a1.patch
+1405649-60a1.patch
+1437949-2-60a1.patch
+1436997-1-60a1.patch
+1436997-2-60a1.patch
+1421737-1-60a1.patch
+1421737-2-60a1.patch
+1421737-3-60a1.patch
+1421737-4-60a1.patch
+1438014-60a1.patch
+1429361-60a1.patch
+1438704-60a1.patch
+1173851-1only-60a1.patch
+1434528-60a1.patch
+1436575-2a-60a1.patch
+1405087-1-60a1.patch
+1405087-2-60a1.patch
+1405087-3no4-60a1.patch
+1405087-5-60a1.patch
+servo-20056-60a1.patch
+1361618-60a1.patch
+1438348-60a1.patch
+1437828-60a1.patch
+1437852-60a1.patch
+1438174-60a1.patch
+1438508-60a1.patch
+1438127-60a1.patch
+1438425-fix-60a1.patch
+1438408-60a1.patch
+1438321-60a1.patch
+1437729-60a1.patch
+1437374-60a1.patch
+1432853-1-60a1.patch
+1432853-2-60a1.patch
+1436863-1-60a1.patch
+1385998-3-60a1.patch
+1438040-60a1.patch
+1437728-60a1.patch
+servo-20061-60a1.patch
+1437572-1-60a1.patch
+1437572-2-60a1.patch
+1437912-1-60a1.patch
+1437912-2-60a1.patch
+1437912-3-60a1.patch
+1438476-1-60a1.patch
+1438476-2-60a1.patch
+1438476-3-60a1.patch
+1404877-60a1.patch
+1437147-60a1.patch
+1437886-60a1.patch
+1436247-1-60a1.patch
+1436247-2-60a1.patch
+1436247-3-60a1.patch
+1438207-60a1.patch
+1438673-60a1.patch
+1437741-1-60a1.patch
+1437741-2-60a1.patch
+servo-20064-60a1.patch
+servo-20065-60a1.patch
+1393609-60a1.patch
+1438489-60a1.patch
+1439000-60a1.patch
+1307899-60a1.patch
+1405352-60a1.patch
+1438888-60a1.patch
+1438631-1-60a1.patch
+1438631-2-60a1.patch
+1438674-60a1.patch
+1429603-14-60a1.patch
+1429603-15-60a1.patch
+1429603-16-60a1.patch
+1429603-17-60a1.patch
+1429603-18-60a1.patch
+1429603-19-60a1.patch
+1429603-20-60a1.patch
+1429603-21-60a1.patch
+1429603-22-60a1.patch
+1429603-23-60a1.patch
+1429603-24-60a1.patch
+1429603-25-60a1.patch
+1429603-26-60a1.patch
+1429603-27-60a1.patch
+1438278-0-60a1.patch
+1438278-1-60a1.patch
+1438278-2-60a1.patch
+1438278-3-60a1.patch
+1438278-4-60a1.patch
+1438278-5-60a1.patch
+1438278-6-60a1.patch
+1439003-1-60a1.patch
+1439003-2-60a1.patch
+1439003-3-60a1.patch
+1437492-1-60a1.patch
+1437492-2-60a1.patch
+1438797-60a1.patch
+1436151-60a1.patch
+1438002-60a1.patch
+1436263-1-PARTIAL-dommedia-60a1.patch
+1436263-1-PARTIAL-js-60a1.patch
+1436263-2-PARTIAL-dommedia-60a1.patch
+1436263-2-PARTIAL-js-60a1.patch
+1436263-3-PARTIAL-js-60a1.patch
+1436263-5-60a1.patch
+1437530-60a1.patch
+1438618-60a1.patch
+1428453-14-60a1.patch
+1428453-15-60a1.patch
+1439234-60a1.patch
+1425580-13-60a1.patch
+1439361-1-60a1.patch
+1439361-2-60a1.patch
+1439361-3-60a1.patch
+1284414-60a1.patch
+1439004-1-60a1.patch
+1439005-60a1.patch
+1438527-60a1.patch
+1438165-60a1.patch
+1438133-60a1.patch
+1438599-1-60a1.patch
+1438599-2-60a1.patch
+1438599-3-60a1.patch
+1438157-1-60a1.patch
+1438157-2-60a1.patch
+1429603-28-60a1.patch
+1430856-1-60a1.patch
+1430856-2-60a1.patch
+servo-20070-60a1.patch
+1438297-60a1.patch
+servo-20072-60a1.patch
+servo-20073-60a1.patch
+1396819-60a1.patch
+1438463-60a1.patch
+1435092-1-60a1.patch
+1435092-2-60a1.patch
+1436670-60a1.patch
+servo-20078-60a1.patch
+1438892-1-60a1.patch
+1438892-2-60a1.patch
+1438892-3-60a1.patch
+1438892-4-60a1.patch
+1438892-5-60a1.patch
+1438892-6-60a1.patch
+1438892-7-60a1.patch
+1043775-60a1.patch
+1439362-60a1.patch
+1439375-60a1.patch
+1438542-60a1.patch
+1438442-60a1.patch
+1427118-60a1.patch
+1414674-60a1.patch
+1438538-60a1.patch
+1436352-60a1.patch
+1290949-60a1.patch
+1435329-60a1.patch
+1439016-1-60a1.patch
+1439016-2-60a1.patch
+1439016-3-60a1.patch
+1439016-4-60a1.patch
+1439016-5-60a1.patch
+1439435-60a1.patch
+1438332-60a1.patch
+1414751-60a1.patch
+1439371-60a1.patch
+1438641-60a1.patch
+1439634-60a1.patch
+1438930-60a1.patch
+1439001-60a1.patch
+1439474-60a1.patch
+servo-20079-60a1.patch
+1435671-60a1.patch
+1438696-60a1.patch
+1438697-60a1.patch
+1438086-1-fix-60a1.patch
+servo-20081-60a1.patch
+servo-20082-60a1.patch
+1439793-1-60a1.patch
+1439793-2-60a1.patch
+1439793-3-60a1.patch
+1439793-4-60a1.patch
+1439018-60a1.patch
+1438482-60a1.patch
+1438750-60a1.patch
+1438569-60a1.patch
+1433406-60a1.patch
+1437039-60a1.patch
+1439336-60a1.patch
+1439908-60a1.patch
+1438988-60a1.patch
+1439626-60a1.patch
+1439663-60a1.patch
+903519-21-60a1.patch
+1439004-2-60a1.patch
+1440224-60a1.patch
+1440226-60a1.patch
+1434843-1-60a1.patch
+1434843-2-60a1.patch
+1434843-3-60a1.patch
+1434843-4-60a1.patch
+1434843-5-60a1.patch
+1434843-6-60a1.patch
+1428453-16-60a1.patch
+1435317-1-60a1.patch
+1437377-60a1.patch
+1439898-1-60a1.patch
+1439898-2-60a1.patch
+1440519-60a1.patch
+1439898-3-60a1.patch
+1440369-60a1.patch
+1423528-60a1.patch
+1435648-1-60a1.patch
+1435648-2-60a1.patch
+1439763-60a1.patch
+1438389-60a1.patch
+1439923-60a1.patch
+1438118-60a1.patch
+1434593-60a1.patch
+1439736-60a1.patch
+1439437-60a1.patch
+1439041-60a1.patch
+1439076-1-60a1.patch
+1439076-2-60a1.patch
+1434300-2a-60a1.patch
+servo-20088-60a1.patch
+servo-20102-60a1.patch
+1418770-60a1.patch
+1425573-1-60a1.patch
+1425573-2-60a1.patch
+1425573-3-60a1.patch
+1425573-4-60a1.patch
+1428769-60a1.patch
+1440188-60a1.patch
+1431029-1-60a1.patch
+1431029-2-60a1.patch
+1438487-60a1.patch
+1438962-1-60a1.patch
+1438962-2-60a1.patch
+1420130-60a1.patch
+1439828-60a1.patch
+1439953-60a1.patch
+1437087-60a1.patch
+1434792-60a1.patch
+1439433-60a1.patch
+1435100-60a1.patch
+servo-20104-60a1.patch
+1440256-60a1.patch
+1434414-60a1.patch
+1437855-60a1.patch
+1437849-60a1.patch
+1439925-60a1.patch
+1433015-3-60a1.patch
+1431570-60a1.patch
+1439242-60a1.patch
+1439285-1-60a1.patch
+1439285-2-60a1.patch
+1428816-1-60a1.patch
+1428816-2-60a1.patch
+1428816-3-60a1.patch
+1382199-60a1.patch
+1437417-1-60a1.patch
+1437417-2-60a1.patch
+1440411-60a1.patch
+1427639-1-60a1.patch
+1427639-2-60a1.patch
+1436904-1-60a1.patch
+1436904-2-60a1.patch
+1439471-60a1.patch
+1430841-1-60a1.patch
+1430841-2-60a1.patch
+1430841-3-60a1.patch
+1438471-60a1.patch
+1440347-60a1.patch
+1439937-60a1.patch
+1439565-1-60a1.patch
+1439565-2-60a1.patch
+1432232-60a1.patch
+1440670-60a1.patch
+1438848-60a1.patch
+1439063-0-60a1.patch
+1439063-1-60a1.patch
+1439063-2-60a1.patch
+1438086-3a-60a1.patch
+1438086-4a-60a1.patch
+1438827-60a1.patch
+1426006-60a1.patch
+1438841-60a1.patch
+1438851-60a1.patch
+1438853-60a1.patch
+1438860-60a1.patch
+1438934-60a1.patch
+1439638-60a1.patch
+1438838-60a1.patch
+1438877-60a1.patch
+1438883-60a1.patch
+1438941-60a1.patch
+1440559-60a1.patch
+1438638-60a1.patch
+1438846-1only-60a1.patch
+1440043-60a1.patch
+1428433-60a1.patch
+1439619-60a1.patch
+1440118-1-60a1.patch
+1440118-2-60a1.patch
+1440164-1-60a1.patch
+1440164-2-60a1.patch
+1437851-60a1.patch
+1438017-60a1.patch
+1440431-1-60a1.patch
+1440431-2-60a1.patch
+1440431-3-60a1.patch
+1438870-60a1.patch
+1436691-60a1.patch
+1440626-60a1.patch
+1440735-60a1.patch
+1437483-1-60a1.patch
+1437483-2-60a1.patch
+1437483-2a-60a1.patch
+1438800-60a1.patch
+1437780-2-60a1.patch
+1439333-60a1.patch
+1436953-60a1.patch
+1313336-1-60a1.patch
+1313336-2-60a1.patch
+1313336-3-60a1.patch
+1313336-4-60a1.patch
+1313336-5-60a1.patch
+1313336-6-60a1.patch
+1313336-7-60a1.patch
+1436955-60a1.patch
+1438113-1-60a1.patch
+1435317-2-60a1.patch
+1438113-2-60a1.patch
+1432345-1-60a1.patch
+1440372-60a1.patch
+1426457-60a1.patch
+1437483-3-60a1.patch
+1437483-4-60a1.patch
+1439284-1-60a1.patch
+1441152-60a1.patch
+1441443-60a1.patch
+1440512-60a1.patch
+1439284-2-60a1.patch
+1359342-1-60a1.patch
+1359342-2-60a1.patch
+1359342-3-60a1.patch
+1359342-4-60a1.patch
+1437428-60a1.patch
+1440739-60a1.patch
+1038099-60a1.patch
+1441487-1-60a1.patch
+1441487-2-60a1.patch
+1440330-60a1.patch
+1432446-60a1.patch
+1440309-60a1.patch
+1441038-60a1.patch
+1440599-60a1.patch
+1441587-1-60a1.patch
+1441587-2-60a1.patch
+1341261-1-60a1.patch
+1341261-2-60a1.patch
+1341261-3-60a1.patch
+1432345-2-60a1.patch
+1441521-60a1.patch
+1441494-60a1.patch
+1441335-60a1.patch
+1438842-1-60a1.patch
+1438842-2-60a1.patch
+1438842-3-60a1.patch
+1438842-4-60a1.patch
+1438842-5-60a1.patch
+1437450-60a1.patch
+1441783-60a1.patch
+1441988-1-60a1.patch
+1440394-1-60a1.patch
+1440394-2-60a1.patch
+1440394-3-60a1.patch
+1441927-1-60a1.patch
+1441988-2-60a1.patch
+903519-22-60a1.patch
+903519-23-60a1.patch
+1440112-1-60a1.patch
+1440112-2-60a1.patch
+1439954-60a1.patch
+servo-20117-60a1.patch
+1438467-60a1.patch
+1439036-1-60a1.patch
+1439036-2-60a1.patch
+1432490-1-60a1.patch
+1432490-2-60a1.patch
+1437714-60a1.patch
+1440961-60a1.patch
+1441009-1-60a1.patch
+1440221-60a1.patch
+1439920-60a1.patch
+1440093-60a1.patch
+1439711-60a1.patch
+1438794-60a1.patch
+1439046-60a1.patch
+1440252-60a1.patch
+1436117-60a1.patch
+servo-20123-60a1.patch
+1440682-60a1.patch
+1353461-1-60a1.patch
+1353461-2-60a1.patch
+1353461-3-60a1.patch
+1353461-5-60a1.patch
+1353461-6-60a1.patch
+1432745-60a1.patch
+1439673-60a1.patch
+1439991-1-60a1.patch
+1439991-2-60a1.patch
+1437850-60a1.patch
+1437854-60a1.patch
+1439500-60a1.patch
+1439723-60a1.patch
+1440538-1-60a1.patch
+1440538-2-60a1.patch
+1440538-3-60a1.patch
+1440538-4-60a1.patch
+1440538-5-60a1.patch
+1440029-60a1.patch
+servo-20124-60a1.patch
+1439485-60a1.patch
+1432509-60a1.patch
+1370794-1-60a1.patch
+1370794-2-60a1.patch
+1438790-60a1.patch
+1432416-1-60a1.patch
+1432416-2-60a1.patch
+1432416-3-60a1.patch
+1432416-4-60a1.patch
+1429185-1-60a1.patch
+1429185-2no3or4-60a1.patch
+1439411-60a1.patch
+1440550-60a1.patch
+1432682-0-60a1.patch
+1432682-1-60a1.patch
+1441225-60a1.patch
+1439529-60a1.patch
+1439378-60a1.patch
+servo-20133-60a1.patch
+1441019-09-60a1.patch
+servo-20058-60a1.patch
+NOBUG-20180227-rayon-60a1.patch
+1439395-1-60a1.patch
+1439395-2-60a1.patch
+1402064-PARTIAL-60a1.patch
+1441019-01-60a1.patch
+1441019-02-60a1.patch
+1441019-03-60a1.patch
+1441019-04-60a1.patch
+1441019-05-60a1.patch
+1441019-06-60a1.patch
+1441019-07-60a1.patch
+1441019-08-60a1.patch
+1441019-10-60a1.patch
+1441019-11-60a1.patch
+1441019-12-60a1.patch
+1439897-60a1.patch
+1440740-60a1.patch
+1433060-60a1.patch
+1433929-1-60a1.patch
+1433929-2-60a1.patch
+1433929-3no4-60a1.patch
+1433929-5-60a1.patch
+1441192-60a1.patch
+1441460-60a1.patch
+1425246-60a1.patch
+1414176-60a1.patch
+servo-20131-60a1.patch
+servo-20134-60a1.patch
+servo-20136-60a1.patch
+1441558-60a1.patch
+1441547-60a1.patch
+1440761-60a1.patch
+1434333-60a1.patch
+1440320-1-60a1.patch
+1440320-2-60a1.patch
+1441528-60a1.patch
+1439767-60a1.patch
+1427608-1-60a1.patch
+1427608-2-60a1.patch
+1437332-1-60a1.patch
+1437332-2-60a1.patch
+1431646-60a1.patch
+1435910-0_2-60a1.patch
+1433175-1a-60a1.patch
+1437893-60a1.patch
+1441500-60a1.patch
+servo-20138-60a1.patch
+NOBUG-20180228-euclid-60a1.patch
+servo-20140-60a1.patch
+servo-20141-60a1.patch
+servo-20146-60a1.patch
+1441112-60a1.patch
+1441613-1-60a1.patch
+1382606-60a1.patch
+1437848-60a1.patch
+1441825-60a1.patch
+1441218-60a1.patch
+1441527-60a1.patch
+1441578-60a1.patch
+1441896-60a1.patch
+523950-01-60a1.patch
+523950-02-60a1.patch
+523950-03-60a1.patch
+523950-04-60a1.patch
+523950-05-60a1.patch
+523950-06-60a1.patch
+523950-07-60a1.patch
+523950-08-60a1.patch
+523950-09-60a1.patch
+523950-10-60a1.patch
+1441613-2-60a1.patch
+1441613-3-60a1.patch
+1440555-1-60a1.patch
+1440555-2-60a1.patch
+1410456-02no01-60a1.patch
+1410456-03-60a1.patch
+1410456-04-60a1.patch
+1410456-05-60a1.patch
+1410456-06-60a1.patch
+1410456-07-60a1.patch
+1410456-08-60a1.patch
+1410456-09-60a1.patch
+1410456-10-60a1.patch
+1410456-11-60a1.patch
+1441830-60a1.patch
+NOBUG-20180301-itertools-60a1.patch
+servo-20143-60a1.patch
+1438391-60a1.patch
+1438401-60a1.patch
+1441868-60a1.patch
+1419350-1-60a1.patch
+1419350-2-60a1.patch
+1437847-60a1.patch
+1437890-1-60a1.patch
+1437890-2-60a1.patch
+1441974-60a1.patch
+1442001-60a1.patch
+1442150-1-60a1.patch
+1441424-1-60a1.patch
+1436510-60a1.patch
+1436845-1-60a1.patch
+1436845-2-60a1.patch
+1436845-3-60a1.patch
+1441872-60a1.patch
+1442266-60a1.patch
+1432195-60a1.patch
+1437003-60a1.patch
+servo-20145-60a1.patch
+1441182-60a1.patch
+1428795-60a1.patch
+1428795-1-60a1.patch
+1428795-2-60a1.patch
+1428795-3-60a1.patch
+1428795-4-60a1.patch
+1441226-60a1.patch
+1441882-1-60a1.patch
+1441882-2-60a1.patch
+1437845-60a1.patch
+1438326-60a1.patch
+1440938-1-60a1.patch
+1440938-2-60a1.patch
+1423261-1-60a1.patch
+1438837-60a1.patch
+1441622-60a1.patch
+servo-20170-60a1.patch
+1440040-1-60a1.patch
+1440040-2-60a1.patch
+1440040-3-60a1.patch
+1440040-4-60a1.patch
+1440664-1-60a1.patch
+1440664-2-60a1.patch
+1440664-3-60a1.patch
+1440664-4-60a1.patch
+1440664-5-60a1.patch
+1440664-6-60a1.patch
+1440177-1-60a1.patch
+1440177-2-60a1.patch
+1440177-3-60a1.patch
+1440177-4-60a1.patch
+1440177-5-60a1.patch
+1440177-6-60a1.patch
+1440177-7-60a1.patch
+1430942-60a1.patch
+1441424-2-60a1.patch
+1357688-60a1.patch
+1440497-60a1.patch
+1442037-60a1.patch
+1440816-1-60a1.patch
+1432642-60a1.patch
+1440867-60a1.patch
+1441765-1-60a1.patch
+1441765-2-60a1.patch
+1439403-60a1.patch
+1425580-14-60a1.patch
+1438151-60a1.patch
+1441779-1-60a1.patch
+1441779-2-60a1.patch
+1440169-1-60a1.patch
+1440169-2-60a1.patch
+1382609-60a1.patch
+1233890-60a1.patch
+1382577-60a1.patch
+1441260-60a1.patch
+1442075-60a1.patch
+1432153-60a1.patch
+servo-20171-60a1.patch
+servo-20173-60a1.patch
+NOBUG-20180302-bindgen-60a1.patch
+1441916-1-60a1.patch
+1441916-2-60a1.patch
+1441916-3-60a1.patch
+1441916-4-60a1.patch
+1441916-5-60a1.patch
+1441916-6-60a1.patch
+1441916-7-60a1.patch
+1437844-60a1.patch
+1442305-60a1.patch
+1441153-60a1.patch
+1442318-60a1.patch
+1413049-1-60a1.patch
+1413049-1a-60a1.patch
+1413049-2-60a1.patch
+1405843-60a1.patch
+1438880-60a1.patch
+1440914-60a1.patch
+1422043-60a1.patch
+1441454-60a1.patch
+1421818-60a1.patch
+1441145-1-60a1.patch
+1441145-2-60a1.patch
+1441588-1-60a1.patch
+1441588-2-60a1.patch
+1248498-60a1.patch
+1437806-60a1.patch
+1442785-60a1.patch
+1442608-60a1.patch
+1441860-60a1.patch
+1442451-60a1.patch
+1442295-60a1.patch
+1439839-60a1.patch
+1424154-60a1.patch
+1441333-1-60a1.patch
+1442385-60a1.patch
+1435692-1-60a1.patch
+1435692-2-60a1.patch
+1435692-3-60a1.patch
+1435692-4-60a1.patch
+servo-20178-60a1.patch
+1442246-60a1.patch
+servo-20180-60a1.patch
+servo-20183-60a1.patch
+servo-20187-60a1.patch
+1415886-60a1.patch
+1193394-1-60a1.patch
+1193394-2-60a1.patch
+1441864-60a1.patch
+1438121-1-60a1.patch
+1438121-2-60a1.patch
+1438121-3-60a1.patch
+1438121-4-60a1.patch
+1438121-5-60a1.patch
+1438121-6-60a1.patch
+1438121-7-60a1.patch
+1442753-60a1.patch
+1443121-60a1.patch
+1440102-60a1.patch
+1442813-60a1.patch
+1307925-60a1.patch
+1442680-60a1.patch
+1442146-60a1.patch
+1435983-60a1.patch
+servo-20193-60a1.patch
+servo-20191-60a1.patch
+servo-20189-60a1.patch
+servo-20192-60a1.patch
+servo-20194-60a1.patch
+servo-20196-60a1.patch
+servo-20198-60a1.patch
+1442640-60a1.patch
+1441380-60a1.patch
+1436200-60a1.patch
+1443231-1-60a1.patch
+1443231-2-60a1.patch
+1443231-3-60a1.patch
+1437694-60a1.patch
+1443163-60a1.patch
+1382604-60a1.patch
+253143-1only-60a1.patch
+1440511-01-60a1.patch
+1440511-02-60a1.patch
+1440511-03-60a1.patch
+1440511-04-60a1.patch
+1440511-05-60a1.patch
+1440511-06-60a1.patch
+1440511-07-60a1.patch
+1440511-08-60a1.patch
+1440511-09-60a1.patch
+1440511-10-60a1.patch
+1440511-11-60a1.patch
+1440511-12-60a1.patch
+1411415-1a-60a1.patch
+1438121-8-60a1.patch
+1442150-2-60a1.patch
+1442150-3-60a1.patch
+1442150-4-60a1.patch
+1442150-5-60a1.patch
+1438655-60a1.patch
+1443368-60a1.patch
+1443402-60a1.patch
+servo-20200-60a1.patch
+1442627-1-60a1.patch
+1442627-2-60a1.patch
+1442627-3-60a1.patch
+1442627-4-60a1.patch
+1442627-5-60a1.patch
+1442627-6-60a1.patch
+1442627-7-60a1.patch
+1442543-60a1.patch
+1443367-60a1.patch
+1363862-1-60a1.patch
+1363862-2-60a1.patch
+1438608-60a1.patch
+1437807-60a1.patch
+1401847-60a1.patch
+1442160-60a1.patch
+1421387-60a1.patch
+1443193-60a1.patch
+1434439-60a1.patch
+servo-20211-60a1.patch
+1434483-60a1.patch
+1442523-60a1.patch
+1280099-60a1.patch
+1414901-1a-60a1.patch
+1414901-1b-60a1.patch
+1414901-2-60a1.patch
+1442404-60a1.patch
+1434822-1-60a1.patch
+1434822-2-60a1.patch
+1434822-3-60a1.patch
+1430438-1-60a1.patch
+1443147-60a1.patch
+1441012-60a1.patch
+1443592-1-60a1.patch
+1443592-2-60a1.patch
+1443592-3-60a1.patch
+1443592-4-60a1.patch
+1443592-5-60a1.patch
+1443592-6-60a1.patch
+1443592-7-60a1.patch
+1425580-15-60a1.patch
+1425580-16-60a1.patch
+1425580-17-60a1.patch
+1425580-18-60a1.patch
+1425580-19-60a1.patch
+1443727-60a1.patch
+1439026-1-60a1.patch
+1439026-2-60a1.patch
+1444081-60a1.patch
+1442656-60a1.patch
+1438886-1-60a1.patch
+1438886-2-60a1.patch
+1442748-1-60a1.patch
+1442748-2-60a1.patch
+1443357-60a1.patch
+1442126-60a1.patch
+1443344-60a1.patch
+1443393-60a1.patch
+1443697-60a1.patch
+1436096-1-60a1.patch
+1436096-2-60a1.patch
+1024082-1-60a1.patch
+1024082-2-60a1.patch
+1024082-3-60a1.patch
+1441462-60a1.patch
+1441271-60a1.patch
+1435013-60a1.patch
+servo-20230-60a1.patch
+1436341-1-60a1.patch
+1436341-2-60a1.patch
+1443585-1-60a1.patch
+1443585-2-60a1.patch
+1442422-60a1.patch
+1154874-60a1.patch
+1382605-60a1.patch
+1363061-60a1.patch
+1442767-1-60a1.patch
+1442767-2-60a1.patch
+1443187-60a1.patch
+1443397-60a1.patch
+1436187-1-60a1.patch
+1436187-2-60a1.patch
+1436187-3-60a1.patch
+1436187-4-60a1.patch
+1443470-1-60a1.patch
+1443470-2-60a1.patch
+1443470-3-60a1.patch
+1439846-60a1.patch
+1443932-1-60a1.patch
+1443932-2-60a1.patch
+1442502-60a1.patch
+1442304-60a1.patch
+1438835-60a1.patch
+1443988-1-60a1.patch
+1443988-2-60a1.patch
+1443198-1-60a1.patch
+1443198-2-60a1.patch
+1443301-1-60a1.patch
+1443301-2-60a1.patch
+1443301-3-60a1.patch
+1443301-4-60a1.patch
+1437272-1-60a1.patch
+1437272-2-60a1.patch
+1437272-3-60a1.patch
+1443046-60a1.patch
+servo-20238-60a1.patch
+1434855-1-60a1.patch
+1434855-2-60a1.patch
+1441761-60a1.patch
+1444036-60a1.patch
+1444004-60a1.patch
+1443746-60a1.patch
+1352877-1-60a1.patch
+1440966-60a1.patch
+1438394-60a1.patch
+servo-20236-60a1.patch
+servo-20237-60a1.patch
+1440322-60a1.patch
+1436197-60a1.patch
+1440678-60a1.patch
+1444073-60a1.patch
+1440816-2-60a1.patch
+servo-20245-60a1.patch
+NOBUG-20180309-revendor-60a1.patch
+1434392-60a1.patch
+1444221-60a1.patch
+1434885-60a1.patch
+1443461-60a1.patch
+NOBUG-20180309-euclid-60a1.patch
+servo-20254-60a1.patch
+1307928-1-60a1.patch
+1307928-2-60a1.patch
+1307928-3-60a1.patch
+1307928-4-60a1.patch
+1441885-60a1.patch
+1415211-60a1.patch
+1444150-60a1.patch
+1434692-1only-60a1.patch
+1443685-60a1.patch
+1325320-1-60a1.patch
+1443232-1-60a1.patch
+1443232-2-60a1.patch
+1428430-60a1.patch
+1443228-60a1.patch
+1444175-60a1.patch
+1443807-1-60a1.patch
+1443807-2-60a1.patch
+1444404-60a1.patch
+1307555-1-60a1.patch
+1307555-2-60a1.patch
+1434849-60a1.patch
+1435959-60a1.patch
+1442312-1-60a1.patch
+1442312-2-60a1.patch
+1442312-3-60a1.patch
+1441531-60a1.patch
+1443642-60a1.patch
+1444252-60a1.patch
+1440206-60a1.patch
+1444494-60a1.patch
+1444539-1-60a1.patch
+1444539-2-60a1.patch
+1443640-60a1.patch
+1443232-3-60a1.patch
+1438121-09-60a1.patch
+1438121-10-60a1.patch
+1438121-11-60a1.patch
+1438121-12-60a1.patch
+1438121-13-60a1.patch
+1438121-14-60a1.patch
+1408673-60a1.patch
+1425626-60a1.patch
+1425580-20-60a1.patch
+1439885-60a1.patch
+1438121-15-60a1.patch
+1442561-1-60a1.patch
+1442561-2-60a1.patch
+1437733-60a1.patch
+1442561-3-60a1.patch
+1444593-60a1.patch
+1437295-1-60a1.patch
+1437295-2-60a1.patch
+1437295-3-60a1.patch
+1437295-4-60a1.patch
+1437295-5-60a1.patch
+1444082-60a1.patch
+1444666-60a1.patch
+servo-20274-60a1.patch
+1444374-60a1.patch
+1444679-1-60a1.patch
+1444679-2-60a1.patch
+1441817-60a1.patch
+1420485-6-60a1.patch
+1382841-1-60a1.patch
+1382841-2-60a1.patch
+1382841-3-60a1.patch
+1382841-4-60a1.patch
+1382841-5-60a1.patch
+1444303-61a1.patch
+1444881-61a1.patch
+1421563-61a1.patch
+1401129-7-61a1.patch
+1401129-8-61a1.patch
+1444357-61a1.patch
+1444106-61a1.patch
+1444414-61a1.patch
+1437627-1-61a1.patch
+1437627-2-61a1.patch
+1437627-3-61a1.patch
+1416726-61a1.patch
+1444339-61a1.patch
+1439026-3-61a1.patch
+1439026-4-61a1.patch
+1423261-2-61a1.patch
+1443224-61a1.patch
+1443831-61a1.patch
+1431050-61a1.patch
+servo-20204-61a1.patch
+1444416-1-61a1.patch
+1444416-2no3-61a1.patch
+1444628-61a1.patch
+1443557-61a1.patch
+1444380-61a1.patch
+1443152-61a1.patch
+1445073-61a1.patch
+1432683-61a1.patch
+1443081-01-client-aboutdebugging-61a1.patch
+1443081-02-client-animationinspector-61a1.patch
+1443081-03-client-root-61a1.patch
+1443081-04-client-dom-61a1.patch
+1443081-05-client-framework-61a1.patch
+1443081-06-client-inspector-61a1.patch
+1443081-07-client-jsonview-61a1.patch
+1443081-08-client-memory-61a1.patch
+1443081-09-client-netmonitor-61a1.patch
+1443081-10-client-performance-61a1.patch
+1443081-11-client-responsive-61a1.patch
+1443081-12-client-shared-61a1.patch
+1443081-13-client-sourceeditor-61a1.patch
+1443081-14-client-storage-61a1.patch
+1443081-15-client-styleeditor-61a1.patch
+1443081-16-client-webconsole-61a1.patch
+1443081-17-server-actors-61a1.patch
+1443081-18-server-root-61a1.patch
+1443081-19-server-performance-61a1.patch
+1443081-20-server-tests-61a1.patch
+1443081-21-shared-61a1.patch
+1443081-22-shim-61a1.patch
+1440321-1a-aboutdebugging-61a1.patch
+1440321-1b-canvasdebugger-61a1.patch
+1440321-1c-commandline-61a1.patch
+1440321-1d-debugger-61a1.patch
+1440321-1e-dom-61a1.patch
+1440321-1f-framework-61a1.patch
+1440321-1g-inspector-61a1.patch
+1440321-1h-jsonview-61a1.patch
+1440321-1i-memory-61a1.patch
+1440321-1j-performance-61a1.patch
+1440321-1k-scratchpad-61a1.patch
+1440321-1l-shadereditor-61a1.patch
+1440321-1m-shared-61a1.patch
+1440321-1n-sourceeditor-61a1.patch
+1440321-1o-storage-61a1.patch
+1440321-1p-styleeditor-61a1.patch
+1440321-1q-webaudioeditor-61a1.patch
+1440321-1r-webconsole-61a1.patch
+1440321-2-61a1.patch
+1440321-3-61a1.patch
+1440321-4-61a1.patch
+1441703-1-61a1.patch
+1441703-2-61a1.patch
+1411037-61a1.patch
+servo-20288-61a1.patch
+NOBUG-20180313-toml-61a1.patch
+NOBUG-20180313-revendor-61a1.patch
+1444048-61a1.patch
+1443518-61a1.patch
+1416016-2-61a1.patch
+1445026-61a1.patch
+NOBUG-20180313-fixnames-61a1.patch
+NOBUG-20180313-fixeol-61a1.patch
+NOBUG-20180313-compilefix-61a1.patch
+1375074-61a1.patch
+1442583-61a1.patch
+1439404-1-61a1.patch
+1439404-2-61a1.patch
+1439404-3-61a1.patch
+1439404-4-61a1.patch
+1441142-1-61a1.patch
+1441142-2-61a1.patch
+1440618-61a1.patch
+1434054-61a1.patch
+1333018-2-61a1.patch
+1401939-61a1.patch
+1419094-1-61a1.patch
+1445181-1-61a1.patch
+1445181-2-61a1.patch
+1445181-3-61a1.patch
+1445196-61a1.patch
+1419094-2-61a1.patch
+1444506-6-61a1.patch
+1426588-61a1.patch
+1442967-1-61a1.patch
+1442967-2-61a1.patch
+1442967-3-61a1.patch
+1444680-1a-61a1.patch
+1444680-1b-61a1.patch
+1444680-2-61a1.patch
+1444680-3-61a1.patch
+1444680-4-61a1.patch
+1444680-5-61a1.patch
+1444680-6-61a1.patch
+1444680-7a-61a1.patch
+1444680-7b-61a1.patch
+1444680-7c-61a1.patch
+1444680-7d-61a1.patch
+1444680-7e-61a1.patch
+1444680-7f-61a1.patch
+1444680-7g-61a1.patch
+1444680-7h-61a1.patch
+1444758-01-61a1.patch
+1444905-61a1.patch
+1431573-00-61a1.patch
+1431573-01-61a1.patch
+1431573-02-61a1.patch
+1431573-03-61a1.patch
+1431573-04-61a1.patch
+1431573-05-61a1.patch
+1431573-06-61a1.patch
+1431573-07-61a1.patch
+1431573-08-61a1.patch
+1431573-09-61a1.patch
+1431573-10-61a1.patch
+1431573-11-61a1.patch
+1431573-12-61a1.patch
+NOBUG-20180313-inspector-61a1.patch
+1443079-61a1.patch
+1445245-61a1.patch
+1441495-61a1.patch
+1443792-1-61a1.patch
+1443792-2-61a1.patch
+1443792-3-61a1.patch
+1443792-4-61a1.patch
+1443792-5-61a1.patch
+1445193-61a1.patch
+1444167-1only-61a1.patch
+1445019-61a1.patch
+1363900-61a1.patch
+1442200-61a1.patch
+1435291-1-61a1.patch
+1325320-2-61a1.patch
+1325320-3-61a1.patch
+1325320-4-61a1.patch
+1445117-61a1.patch
+1441635-1-61a1.patch
+1441635-2-61a1.patch
+1351685-61a1.patch
+1391255-61a1.patch
+1437532-61a1.patch
+1445633-61a1.patch
+1444834-61a1.patch
+1445592-61a1.patch
+1445551-6only-PARTIAL-61a1.patch
+977538-2-61a1.patch
+1435360-1-61a1.patch
+1435360-2-61a1.patch
+1435360-3-61a1.patch
+1435360-4-61a1.patch
+1445658-61a1.patch
+1445704-61a1.patch
+1445610-61a1.patch
+1442599-1-61a1.patch
+1442599-2-61a1.patch
+1442599-3-61a1.patch
+1442599-4-61a1.patch
+1442599-5-61a1.patch
+1442599-6-61a1.patch
+1442599-7-61a1.patch
+1444335-61a1.patch
+1445978-61a1.patch
+1445936-61a1.patch
+1443080-PARTIAL-js-61a1.patch
+1445235-1-61a1.patch
+1445235-2-61a1.patch
+1445403-1-61a1.patch
+1445403-2-61a1.patch
+1445403-3-61a1.patch
+1445419-61a1.patch
+1435788-61a1.patch
+1419226-1-61a1.patch
+1419226-2-61a1.patch
+1443457-61a1.patch
+1445153-61a1.patch
+1435291-2-61a1.patch
+1443671-1-61a1.patch
+1445081-1-61a1.patch
+1445081-2-61a1.patch
+1445003-61a1.patch
+1440638-61a1.patch
+1445188-61a1.patch
+1445766-1a-61a1.patch
+1445008-61a1.patch
+1432039-61a1.patch
+1437032-61a1.patch
+1445556-1-61a1.patch
+1445556-2-61a1.patch
+1445556-3-61a1.patch
+1445888-61a1.patch
+1425573-5-61a1.patch
+1445662-1-61a1.patch
+1445662-2-61a1.patch
+1445662-3-61a1.patch
+1445662-4-61a1.patch
+1445662-5-61a1.patch
+1445662-6-61a1.patch
+1445662-7-61a1.patch
+1445662-8-61a1.patch
+1443292-61a1.patch
+1445496-61a1.patch
+1446071-61a1.patch
+1445955-61a1.patch
+1445947-61a1.patch
+1445619-61a1.patch
+1446166-61a1.patch
+1445935-61a1.patch
+1354883-61a1.patch
+1445776-61a1.patch
+1446064-61a1.patch
+1425599-01-61a1.patch
+1425599-02-61a1.patch
+1425599-03-61a1.patch
+1425599-04-61a1.patch
+1425599-05-61a1.patch
+1425599-06-61a1.patch
+1425599-07-61a1.patch
+1425599-08-61a1.patch
+1425599-09-61a1.patch
+1425599-10-61a1.patch
+1425599-11-61a1.patch
+1425599-12-61a1.patch
+1425599-13-61a1.patch
+1425599-14-61a1.patch
+1425599-15-61a1.patch
+1425599-16-61a1.patch
+1425599-17-61a1.patch
+1443803-61a1.patch
+1445763-61a1.patch
+1444946-1-61a1.patch
+1444946-2-61a1.patch
+1382585-61a1.patch
+1382599-61a1.patch
+1382600-61a1.patch
+1382602-61a1.patch
+1444798-61a1.patch
+1445229-61a1.patch
+1445230-61a1.patch
+1446471-1-61a1.patch
+1446471-2-61a1.patch
+1446471-3-61a1.patch
+1441324-1-61a1.patch
+1441324-2-61a1.patch
+1441324-3-61a1.patch
+1441324-4-61a1.patch
+1435816-61a1.patch
+1382581-1-61a1.patch
+1382581-2-61a1.patch
+1382581-3-61a1.patch
+1382581-4-61a1.patch
+1382581-5-61a1.patch
+1382581-6-61a1.patch
+1382581-7-61a1.patch
+1382581-8-61a1.patch
+1446254-61a1.patch
+1445595-61a1.patch
+1440531-61a1.patch
+1446315-1-61a1.patch
+1446315-2-61a1.patch
+1438839-1-61a1.patch
+1438839-2-61a1.patch
+1438839-3-61a1.patch
+1438839-4-61a1.patch
+1440714-05-61a1.patch
+1439006-61a1.patch
+1397795-1-61a1.patch
+1369711-1-61a1.patch
+1369711-2-61a1.patch
+1446280-61a1.patch
+1446680-61a1.patch
+1440388-1-61a1.patch
+1440388-2-61a1.patch
+1440388-3-61a1.patch
+1440388-4-61a1.patch
+1444177-61a1.patch
+1446583-61a1.patch
+1446766-1-61a1.patch
+1446766-2-61a1.patch
+1446766-3-61a1.patch
+1446061-61a1.patch
+1445966-61a1.patch
+1446348-61a1.patch
+1362417-61a1.patch
+1442465-1-61a1.patch
+1442465-2-61a1.patch
+1442465-3-61a1.patch
+1442465-4_1-61a1.patch
+1442465-4_2-61a1.patch
+1442465-5-61a1.patch
+1442465-6-61a1.patch
+1442465-7-61a1.patch
+1447091-61a1.patch
+1447070-61a1.patch
+servo-20339-61a1.patch
+servo-20351-61a1.patch
+1445837-61a1.patch
+1403188-61a1.patch
+1444327-61a1.patch
+1443671-2-61a1.patch
+1443599-61a1.patch
+1407240-61a1.patch
+1446022-61a1.patch
+1188955-1-61a1.patch
+1188955-2-61a1.patch
+1188955-3-61a1.patch
+1446941-61a1.patch
+1446614-61a1.patch
+1413392-61a1.patch
+1446342-61a1.patch
+1445291-61a1.patch
+1438755-1-61a1.patch
+1438755-2-61a1.patch
+1438755-3-61a1.patch
+1438755-4-61a1.patch
+1437366-1-61a1.patch
+1437366-2-61a1.patch
+1437366-3-61a1.patch
+1437366-4-61a1.patch
+1437366-5-61a1.patch
+1437366-6-61a1.patch
+1443898-61a1.patch
+1446358-61a1.patch
+1444152-61a1.patch
+1382601-1-61a1.patch
+1382601-2-61a1.patch
+1447154-1-61a1.patch
+1447154-2-61a1.patch
+1435472-61a1.patch
+1444894-61a1.patch
+1388842-1-61a1.patch
+1444926-1-61a1.patch
+1444926-2-61a1.patch
+1447401-61a1.patch
+1443208-1only-61a1.patch
+1447086-61a1.patch
+1444594-61a1.patch
+1446592-61a1.patch
+1446833-1-61a1.patch
+1446833-2-61a1.patch
+1446833-3-61a1.patch
+1446833-4-61a1.patch
+1446833-5-61a1.patch
+1446571-2a-61a1.patch
+1446571-2b-61a1.patch
+1446571-3a-61a1.patch
+1446571-3b-61a1.patch
+1446571-3c-61a1.patch
+1446571-3d-61a1.patch
+1446571-3e-61a1.patch
+1444541-61a1.patch
+1446588-61a1.patch
+1447450-61a1.patch
+1445302-61a1.patch
+1441287-1-61a1.patch
+1441287-2-61a1.patch
+1441287-3-61a1.patch
+1441287-4-61a1.patch
+1397795-2-61a1.patch
+1397795-3-61a1.patch
+1447262-61a1.patch
+1447422-61a1.patch
+1447409-61a1.patch
+1203273-61a1.patch
+1445970-1-61a1.patch
+1445970-2-61a1.patch
+1444604-1-61a1.patch
+1444604-2-61a1.patch
+1444604-3-61a1.patch
+1444604-4-61a1.patch
+1444604-5-61a1.patch
+1444604-6-61a1.patch
+1444604-7-61a1.patch
+1443583-01-61a1.patch
+1443583-02-61a1.patch
+1443583-03-61a1.patch
+1443583-04-61a1.patch
+1443583-05-61a1.patch
+1443583-06-61a1.patch
+1443583-07-61a1.patch
+1443583-08-61a1.patch
+1443583-09-61a1.patch
+1443583-10-61a1.patch
+1437537-61a1.patch
+1367833-61a1.patch
+1447073-61a1.patch
+1447074-61a1.patch
+1447632-61a1.patch
+1447157-61a1.patch
+1447326-61a1.patch
+1435036-61a1.patch
+1439960-1-61a1.patch
+1439960-2-61a1.patch
+1447528-61a1.patch
+1401879-61a1.patch
+1438072-0-61a1.patch
+1438072-1-61a1.patch
+1438072-2-61a1.patch
+1438072-3-61a1.patch
+1437730-1-61a1.patch
+1437730-2-61a1.patch
+1437730-3-61a1.patch
+1443614-61a1.patch
+1445624-1-61a1.patch
+1445624-2-61a1.patch
+1445624-3-61a1.patch
+1447286-1-61a1.patch
+1447286-2-61a1.patch
+1447286-3-61a1.patch
+1447286-4-61a1.patch
+1447286-5-61a1.patch
+1448006-61a1.patch
+1447062-61a1.patch
+1440199-1-61a1.patch
+1440199-2-61a1.patch
+1440199-3-61a1.patch
+1444007-61a1.patch
+1447750-61a1.patch
+1447728-1only-61a1.patch
+1447578-1-61a1.patch
+1447578-2-61a1.patch
+1447578-3-61a1.patch
+1447578-4-61a1.patch
+1447578-5-61a1.patch
+1371591-1-61a1.patch
+1371591-2-61a1.patch
+1371591-3-61a1.patch
+1446051-61a1.patch
+1447018-61a1.patch
+1429818-1-61a1.patch
+1412238-2-61a1.patch
+1447017-61a1.patch
+1447362-61a1.patch
+1447763-61a1.patch
+1083458-1-61a1.patch
+1083458-2-61a1.patch
+1443608-61a1.patch
+1447359-61a1.patch
+1439788-61a1.patch
+1447835-61a1.patch
+1446650-61a1.patch
+1428387-61a1.patch
+1447742-61a1.patch
+1446811-61a1.patch
+1447914-61a1.patch
+1416045-61a1.patch
+1443846-1-61a1.patch
+1443846-2-61a1.patch
+1443846-3-61a1.patch
+1440013-61a1.patch
+1448288-61a1.patch
+1414286-1-61a1.patch
+1414286-2-61a1.patch
+1434007-2-61a1.patch
+1447391-61a1.patch
+1444033-61a1.patch
+1448138-61a1.patch
+servo-20407-61a1.patch
+1446617-1-61a1.patch
+1448387-61a1.patch
+1440714-09-61a1.patch
+1445207-61a1.patch
+1447210-1-61a1.patch
+1447210-2-61a1.patch
+1447817-61a1.patch
+1431221-01-61a1.patch
+1431221-02-61a1.patch
+1431221-03-61a1.patch
+1431221-04-61a1.patch
+1431221-05-61a1.patch
+1431221-06-61a1.patch
+1431221-07-61a1.patch
+1431221-08-61a1.patch
+1431221-09-61a1.patch
+1431221-10-61a1.patch
+1431221-11-61a1.patch
+1431221-12-61a1.patch
+1431221-13-61a1.patch
+1431221-14-61a1.patch
+1432779-1-61a1.patch
+1432779-2-61a1.patch
+1432779-3-61a1.patch
+1432779-4-61a1.patch
+1432779-5-61a1.patch
+1432779-6-61a1.patch
+1432779-7-61a1.patch
+1432779-8-61a1.patch
+1432779-9-61a1.patch
+1444479-01-61a1.patch
+1444479-02-61a1.patch
+1444479-03-61a1.patch
+1444479-04-61a1.patch
+1444479-05-61a1.patch
+1444479-06-61a1.patch
+1444479-07-61a1.patch
+1444479-08-61a1.patch
+1444479-09-61a1.patch
+1444479-10-61a1.patch
+1444479-11-61a1.patch
+1448436-61a1.patch
+1447059-61a1.patch
+1447166-1-61a1.patch
+1447166-2-61a1.patch
+1447166-3-61a1.patch
+1447166-4-61a1.patch
+1434513-61a1.patch
+1448627-61a1.patch
+1448490-1-61a1.patch
+1448071-61a1.patch
+1445528-61a1.patch
+1442153-61a1.patch
+1438990-1-61a1.patch
+1438990-2-61a1.patch
+1448883-61a1.patch
+1425603-61a1.patch
+1437880-61a1.patch
+1448378-61a1.patch
+1433037-61a1.patch
+1440714-10-61a1.patch
+1448978-61a1.patch
+1448221-3only-PARTIAL-61a1.patch
+1447903-3a-61a1.patch
+1447903-3c-61a1.patch
+1447903-6a-61a1.patch
+1447903-6b-61a1.patch
+1447903-8a-61a1.patch
+1447903-9a-61a1.patch
+1447903-10a-61a1.patch
+1447903-19a-61a1.patch
+1441509-61a1.patch
+1447821-1-61a1.patch
+1447821-2-61a1.patch
+1444904-61a1.patch
+1449159-61a1.patch
+1423370-61a1.patch
+1447964-61a1.patch
+1412238-3no4-61a1.patch
+1447385-61a1.patch
+1445907-61a1.patch
+1447996-61a1.patch
+1448174-1-61a1.patch
+1448174-2-61a1.patch
+1448174-3-61a1.patch
+1428453-1-61a1.patch
+1428453-2-61a1.patch
+1444673-61a1.patch
+1448809-61a1.patch
+1447261-1-61a1.patch
+1447261-2-61a1.patch
+1447261-3-61a1.patch
+1448552-1-61a1.patch
+1449034-61a1.patch
+1448546-61a1.patch
+1381453-61a1.patch
+1449131-61a1.patch
+1448028-61a1.patch
+1448015-61a1.patch
+1448605-61a1.patch
+1448691-61a1.patch
+1449135-1-61a1.patch
+1449135-2-61a1.patch
+1449135-3-61a1.patch
+1443603-61a1.patch
+1448834-61a1.patch
+1444086-61a1.patch
+1444537-1-61a1.patch
+1444537-2-61a1.patch
+1444219-61a1.patch
+1446993-61a1.patch
+1449299-61a1.patch
+776137-61a1.patch
+1446466-1-61a1.patch
+1446466-2-61a1.patch
+1434717-1-61a1.patch
+1434717-2-61a1.patch
+1434717-3-61a1.patch
+1434717-4-61a1.patch
+1434717-5-61a1.patch
+1434717-6-61a1.patch
+1447457-61a1.patch
+1449194-61a1.patch
+1448136-61a1.patch
+1448232-61a1.patch
+1449099-61a1.patch
+1449285-61a1.patch
+1449296-61a1.patch
+1449051-61a1.patch
+1449254-61a1.patch
+1441141-1-61a1.patch
+1441141-2-61a1.patch
+1448329-61a1.patch
+1448821-61a1.patch
+1448552-2-61a1.patch
+1449029-61a1.patch
+1447563-1-61a1.patch
+1447563-2-61a1.patch
+1448380-61a1.patch
+1447904-61a1.patch
+1448412-61a1.patch
+1444499-1-61a1.patch
+1444499-2-61a1.patch
+1446233-1-61a1.patch
+1446233-2-61a1.patch
+1447998-1-61a1.patch
+1447998-2-61a1.patch
+1447998-3-61a1.patch
+1447998-4-61a1.patch
+1449478-1-61a1.patch
+1449478-2-61a1.patch
+1449392-61a1.patch
+1431439-61a1.patch
+1448835-61a1.patch
+1448836-61a1.patch
+1448582-61a1.patch
+1448838-61a1.patch
+1448837-61a1.patch
+1448839-61a1.patch
+1445235-3-61a1.patch
+1445235-4-61a1.patch
+1445235-5-61a1.patch
+1445235-6-61a1.patch
+1445235-7-61a1.patch
+1449153-61a1.patch
+1449541-61a1.patch
+1449571-61a1.patch
+1449506-61a1.patch
+1448589-1-61a1.patch
+1449213-61a1.patch
+1449511-61a1.patch
+1433909-1-61a1.patch
+1433909-2-61a1.patch
+1433909-3-61a1.patch
+1448771-1-61a1.patch
+1448771-2-61a1.patch
+1448490-2-61a1.patch
+1382982-61a1.patch
+1449118-61a1.patch
+1447131-1-61a1.patch
+1447131-2-61a1.patch
+1447131-3-61a1.patch
+1449145-61a1.patch
+1447299-1-61a1.patch
+1447299-2-61a1.patch
+1447299-3-61a1.patch
+1447299-4-61a1.patch
+1447299-5-61a1.patch
+1447299-6-61a1.patch
+1449620-61a1.patch
+servo-20465-61a1.patch
+servo-20468-61a1.patch
+NOBUG-20180329-revendor-61a1.patch
+1440719-61a1.patch
+1449075-1-61a1.patch
+NOBUG-20180329-extensions-61a1.patch
+1449042-61a1.patch
+1438250-61a1.patch
+1436802-61a1.patch
+1449612-61a1.patch
+1449862-61a1.patch
+1441796-1-61a1.patch
+1441796-2-61a1.patch
+1441796-3-61a1.patch
+1449640-61a1.patch
+1440827-61a1.patch
+1449337-61a1.patch
+1444119-61a1.patch
+1337157-61a1.patch
+1449759-61a1.patch
+1450047-1-61a1.patch
+1450047-2-61a1.patch
+1448306-1-61a1.patch
+1448306-2-61a1.patch
+1448306-3-61a1.patch
+1448306-4-61a1.patch
+1448306-5-61a1.patch
+1437533-1-61a1.patch
+1449051-1-61a1.patch
+1449051-2-61a1.patch
+1448589-2-61a1.patch
+1449189-1-61a1.patch
+1449189-2-61a1.patch
+1450311-61a1.patch
+1449887-61a1.patch
+1449066-61a1.patch
+1441359-61a1.patch
+1450101-61a1.patch
+1449746-61a1.patch
+1447736-61a1.patch
+1428214-61a1.patch
+1450133-61a1.patch
+1446617-2-61a1.patch
+1449518-61a1.patch
+1450221-61a1.patch
+1449975-61a1.patch
+1449679-61a1.patch
+1428468-61a1.patch
+1448519-61a1.patch
+1450699-61a1.patch
+1436809-61a1.patch
+1442669-61a1.patch
+1449342-61a1.patch
+1442330-61a1.patch
+1443525-1-61a1.patch
+1443525-2-61a1.patch
+1429019-1-61a1.patch
+1429019-2-61a1.patch
+1448591-61a1.patch
+1447925-1-61a1.patch
+1447925-2-61a1.patch
+1448320-61a1.patch
+1450724-61a1.patch
+1451038-61a1.patch
+1083458-3-61a1.patch
+1450242-61a1.patch
+1450310-61a1.patch
+1449087-1-61a1.patch
+1450740-61a1.patch
+1443380-61a1.patch
+1083458-4-61a1.patch
+1450804-61a1.patch
+1450802-61a1.patch
+1083458-5-61a1.patch
+1431949-61a1.patch
+1450790-61a1.patch
+1444473-61a1.patch
+1449291-61a1.patch
+1447097-61a1.patch
+1434711-61a1.patch
+1449094-61a1.patch
+1430558-61a1.patch
+1341088-1-61a1.patch
+1341088-2-61a1.patch
+1451246-61a1.patch
+1450099-1-61a1.patch
+1450099-2-61a1.patch
+1451251-61a1.patch
+1450800-1-61a1.patch
+1450800-2-61a1.patch
+1451292-61a1.patch
+1449562-1-61a1.patch
+1449562-2-61a1.patch
+1447193-2-61a1.patch
+1450162-1-61a1.patch
+1450162-2-61a1.patch
+1450162-3-61a1.patch
+1451331-61a1.patch
+1451316-61a1.patch
+1451310-61a1.patch
+1450574-1-61a1.patch
+1443600-61a1.patch
+1448863-61a1.patch
+1451501-61a1.patch
+1323302-61a1.patch
+1451825-61a1.patch
+1328273-61a1.patch
+1348223-1-61a1.patch
+1348223-2-61a1.patch
+1348223-3-61a1.patch
+1348223-4-61a1.patch
+1432793-1-61a1.patch
+1432793-2-61a1.patch
+1432793-3-61a1.patch
+1449976-1-61a1.patch
+1449976-2-61a1.patch
+1449976-3-61a1.patch
+1433408-61a1.patch
+1450182-61a1.patch
+1451296-61a1.patch
+1451761-61a1.patch
+1448667-61a1.patch
+1450574-2no3-61a1.patch
+1448194-61a1.patch
+1452098-61a1.patch
+1437004-3only-61a1.patch
+1450795-1-61a1.patch
+1446904-61a1.patch
+1451945-1-61a1.patch
+1451945-2-61a1.patch
+1450209-61a1.patch
+1450574-4-61a1.patch
+1451443-61a1.patch
+1448887-61a1.patch
+1445973-1-61a1.patch
+1445973-2-61a1.patch
+1445973-3-61a1.patch
+1445973-4-61a1.patch
+1437510-61a1.patch
+1452491-61a1.patch
+1452406-61a1.patch
+1450796-61a1.patch
+1452581-61a1.patch
+1452592-61a1.patch
+1451976-61a1.patch
+1451658-1-61a1.patch
+1451658-61a1.patch
+NOBUG-20180411-jsvalue-61a1.patch
+1452619-1a-fix-61a1.patch
+1373368-1-61a1.patch
+1373368-2-61a1.patch
+1373368-3-61a1.patch
+1373368-4-61a1.patch
+1451733-1-61a1.patch
+1451733-2-61a1.patch
+1451733-3-61a1.patch
+1344350-1-61a1.patch
+1344350-2no3-61a1.patch
+1430803-61a1.patch
+1286861-1-61a1.patch
+1286861-2-61a1.patch
+1286861-3-61a1.patch
+1447180-61a1.patch
+1450163-61a1.patch
+1451798-61a1.patch
+servo-20592-61a1.patch
+1447480-1-61a1.patch
+1447480-2-61a1.patch
+1451453-1-61a1.patch
+1451453-2-61a1.patch
+1451453-3-61a1.patch
+1451453-4-61a1.patch
+1451453-5-61a1.patch
+1452041-61a1.patch
+1452466-61a1.patch
+1452472-61a1.patch
+1452601-61a1.patch
+1451372-61a1.patch
+1452090-61a1.patch
+1449641-1-61a1.patch
+1449641-2-61a1.patch
+1449641-3-61a1.patch
+1440690-61a1.patch
+1420512-61a1.patch
+1451727-1-61a1.patch
+1451727-2-61a1.patch
+1451727-3-61a1.patch
+1451727-4-61a1.patch
+1451727-5-61a1.patch
+1452769-61a1.patch
+1447057-1-61a1.patch
+1452864-1-61a1.patch
+1452864-2-61a1.patch
+1452791-61a1.patch
+1452288-61a1.patch
+1452202-fix-61a1.patch
+1449982-01-61a1.patch
+1449982-02-61a1.patch
+1449982-03-61a1.patch
+1449982-04-61a1.patch
+1449982-05-61a1.patch
+1449982-06-61a1.patch
+1449982-07-61a1.patch
+1449982-08-61a1.patch
+1449982-09-61a1.patch
+1449982-10-61a1.patch
+1449982-11-61a1.patch
+1429816-2-61a1.patch
+1389805-2only-61a1.patch
+1451940-61a1.patch
+1444125-1-61a1.patch
+1444125-2-61a1.patch
+1445536-61a1.patch
+1317539-61a1.patch
+1434926-61a1.patch
+1445668-61a1.patch
+1452818-1-61a1.patch
+1452818-2-61a1.patch
+1452924-61a1.patch
+1452898-61a1.patch
+1452827-1-61a1.patch
+1452827-2-61a1.patch
+1452307-1-61a1.patch
+1453090-61a1.patch
+1447273-1-61a1.patch
+1447273-2-61a1.patch
+1447273-3-61a1.patch
+1453006-61a1.patch
+1453132-61a1.patch
+1452982-01-61a1.patch
+1452982-02-61a1.patch
+1453278-61a1.patch
+1453647-61a1.patch
+1452982-03-61a1.patch
+1452982-04-61a1.patch
+1452982-05-61a1.patch
+1451931-2only-61a1.patch
+1452982-06-61a1.patch
+1449220-61a1.patch
+1436179-61a1.patch
+1445272-1-61a1.patch
+1445272-2-61a1.patch
+1445272-3-61a1.patch
+1445272-4-61a1.patch
+1445272-5-61a1.patch
+1445272-6-61a1.patch
+1445277-61a1.patch
+1434710-61a1.patch
+NOBUG-20160413-qualify-61a1.patch
+1447442-01-61a1.patch
+1447442-02-61a1.patch
+1447442-03-61a1.patch
+1447442-04-61a1.patch
+1447442-05-61a1.patch
+1447442-06-61a1.patch
+1447442-07-61a1.patch
+1447442-08-61a1.patch
+1447442-09-61a1.patch
+1447442-10-61a1.patch
+1447442-11-61a1.patch
+1447442-12-61a1.patch
+1447442-13-61a1.patch
+1447442-14-61a1.patch
+1447442-15-61a1.patch
+1447442-16-61a1.patch
+1452982-09-61a1.patch
+1452982-08-61a1.patch
+1452982-07-61a1.patch
+1391154-61a1.patch
+servo-20619-61a1.patch
+1453030-1-61a1.patch
+1453030-2-61a1.patch
+1452620-1-61a1.patch
+1452620-2-61a1.patch
+1452620-3-61a1.patch
+1442183-61a1.patch
+1453345-1no2-61a1.patch
+1453345-3-61a1.patch
+1453345-4-61a1.patch
+1453345-5-61a1.patch
+1453487-1-61a1.patch
+1453487-2-61a1.patch
+1453397-61a1.patch
+1450954-1-61a1.patch
+1452496-1-61a1.patch
+1452496-2-60.patch
+1452496-3-61a1.patch
+1452496-4-61a1.patch
+1452603-1-61a1.patch
+1452603-2-61a1.patch
+1452603-3-61a1.patch
+1451681-61a1.patch
+1452509-1-61a1.patch
+1452509-2-61a1.patch
+1452509-3-61a1.patch
+1452509-4-61a1.patch
+1278361-1-61a1.patch
+1278361-2-61a1.patch
+1453364-61a1.patch
+1449835-61a1.patch
+1428306-61a1.patch
+1413854-61a1.patch
+1449555-61a1.patch
+1453639-61a1.patch
+1453740-61a1.patch
+1453480-1-61a1.patch
+1453480-4-61a1.patch
+1453559-61a1.patch
+1278920-61a1.patch
+1453814-1-61a1.patch
+1453814-2-61a1.patch
+1452417-61a1.patch
+1453924-61a1.patch
+1447668-1-61a1.patch
+1453456-1-61a1.patch
+1453456-2-61a1.patch
+1453456-3-61a1.patch
+1452982-00-61a1.patch
+1447989-61a1.patch
+1453628-61a1.patch
+1454207-1-61a1.patch
+1454207-2-61a1.patch
+1454207-3-61a1.patch
+1447693-61a1.patch
+1453028-1-61a1.patch
+1453028-2-61a1.patch
+1453028-3-61a1.patch
+1453028-4-61a1.patch
+1454161-61a1.patch
+1452982-11-61a1.patch
+1452982-12-61a1.patch
+1453884-61a1.patch
+1452982-13-61a1.patch
+1425076-1-61a1.patch
+1425076-2-61a1.patch
+1453929-61a1.patch
+1449832-61a1.patch
+1453872-61a1.patch
+1450801-1-61a1.patch
+1450801-2-61a1.patch
+1420908-1-61a1.patch
+1420908-2-61a1.patch
+1443615-61a1.patch
+1454242-1-61a1.patch
+1454242-2-61a1.patch
+1454338-61a1.patch
+1453741-1-61a1.patch
+1453741-2-61a1.patch
+1445944-1-61a1.patch
+1445944-2-61a1.patch
+1445944-3-61a1.patch
+1445944-4-61a1.patch
+1445944-5-61a1.patch
+1445944-6-61a1.patch
+1445944-7-61a1.patch
+1445944-8-61a1.patch
+1445944-9-61a1.patch
+1454440-61a1.patch
+1453463-1-61a1.patch
+1453463-2-61a1.patch
+1453463-3-61a1.patch
+1452699-1-61a1.patch
+1452699-2-61a1.patch
+1454416-61a1.patch
+1454514-61a1.patch
+1454430-61a1.patch
+1437345-2no1-61a1.patch
+1437345-3-61a1.patch
+1342070-0-61a1.patch
+1342070-1-61a1.patch
+1342070-2-61a1.patch
+1342070-3-61a1.patch
+1342070-4-61a1.patch
+1450847-61a1.patch
+1429727-61a1.patch
+1447284-61a1.patch
+1437995-61a1.patch
+1446693-61a1.patch
+1365177-2-61a1.patch
+1453469-61a1.patch
+1452800-61a1.patch
+1454485-1-61a1.patch
+1454485-2-61a1.patch
+1423261-5-61a1.patch
+1064316-1-61a1.patch
+1442947-61a1.patch
+1454398-1-61a1.patch
+1453809-61a1.patch
+1451088-61a1.patch
+1454923-61a1.patch
+1439712-1-61a1.patch
+1439712-2-61a1.patch
+1454512-61a1.patch
+1454987-61a1.patch
+1453921-61a1.patch
+1455071-61a1.patch
+1455071-2-PARTIAL-61a1.patch
+1455071-6-PARTIAL-61a1.patch
+1455071-7-61a1.patch
+1454940-61a1.patch
+1453922-61a1.patch
+1436662-1a-61a1.patch
+1445479-61a1.patch
+1454027-1-61a1.patch
+1454027-2-61a1.patch
+1451469-1-61a1.patch
+1451469-2-61a1.patch
+1451469-3-61a1.patch
+1451469-4-61a1.patch
+1451469-5-61a1.patch
+1451469-6-61a1.patch
+1451469-7-61a1.patch
+1451469-8-61a1.patch
+1454721-61a1.patch
+1444363-61a1.patch
+1454625-1-61a1.patch
+1454625-2-61a1.patch
+1252998-01-61a1.patch
+1252998-02-61a1.patch
+1252998-03-61a1.patch
+1252998-04-61a1.patch
+1252998-05-61a1.patch
+1252998-06-61a1.patch
+1252998-07-61a1.patch
+1252998-08-61a1.patch
+1252998-09-61a1.patch
+1252998-10-61a1.patch
+1252998-11-61a1.patch
+1455120-61a1.patch
+1453426-61a1.patch
+1445067-1-61a1.patch
+1445067-2-61a1.patch
+1445067-3-61a1.patch
+1451745-61a1.patch
+1454094-61a1.patch
+1451211-61a1.patch
+1455127-1-61a1.patch
+1455127-2-61a1.patch
+1455127-3-61a1.patch
+1455162-61a1.patch
+1415342-1only-61a1.patch
+1450954-2-61a1.patch
+1064316-2-61a1.patch
+1454914-1-61a1.patch
+1454914-2-61a1.patch
+1453589-61a1.patch
+1452982-14-61a1.patch
+1452982-15-61a1.patch
+1452602-61a1.patch
+1453932-61a1.patch
+1443468-61a1.patch
+1452571-61a1.patch
+1455179-61a1.patch
+1451065-1-61a1.patch
+1451065-2-61a1.patch
+1451065-3-61a1.patch
+1455143-01-61a1.patch
+1455143-02-61a1.patch
+1455143-03-61a1.patch
+1455143-04-61a1.patch
+1455143-05-61a1.patch
+1455143-06-61a1.patch
+1455143-07-61a1.patch
+1455143-08-61a1.patch
+1455143-09-61a1.patch
+1455143-10no11-61a1.patch
+1455086-61a1.patch
+1453818-61a1.patch
+1454573-61a1.patch
+1410424-1-61a1.patch
+1410424-2-61a1.patch
+1410424-3-61a1.patch
+1455451-61a1.patch
+1443424-61a1.patch
+1455285-61a1.patch
+1448089-1-61a1.patch
+1448089-2-61a1.patch
+1454592-1-61a1.patch
+1454592-2-61a1.patch
+1448439-1-61a1.patch
+1451198-1-61a1.patch
+1451198-2-61a1.patch
+1419373-61a1.patch
+1415852-61a1.patch
+1454398-61a1.patch
+1448563-1-61a1.patch
+1448563-2-61a1.patch
+1448563-3-61a1.patch
+1448563-4-61a1.patch
+1448563-5-61a1.patch
+1448563-6-61a1.patch
+1448563-7-61a1.patch
+1400153-1-61a1.patch
+1400153-2-61a1.patch
+1455599-61a1.patch
+1448563-8-61a1.patch
+1400153-61a1.patch
+1455608-1-61a1.patch
+1455608-2-61a1.patch
+1455693-61a1.patch
+1455703-61a1.patch
+1394399-1-61a1.patch
+1394399-2no3-61a1.patch
+1455569-61a1.patch
+1430215-1only-61a1.patch
+1446019-61a1.patch
+1432653-61a1.patch
+1451002-61a1.patch
+1450834-61a1.patch
+1453274-1-61a1.patch
+1453274-2-61a1.patch
+1455708-61a1.patch
+1441338-61a1.patch
+1455100-61a1.patch
+1448934-1-61a1.patch
+1441246-61a1.patch
+1064316-3-61a1.patch
+1455702-61a1.patch
+1456100-61a1.patch
+1448563-9-61a1.patch
+1285909-2-61a1.patch
+1456203-61a1.patch
+1451524-1-61a1.patch
+1456054-61a1.patch
+1387399-61a1.patch
+1444537-3-61a1.patch
+1444537-4-61a1.patch
+1455406-61a1.patch
+1456119-1-61a1.patch
+1456119-2-61a1.patch
+1455504-61a1.patch
+1455970-61a1.patch
+1433642-2only-PARTIAL-61a1.patch
+1455612-61a1.patch
+1456470-61a1.patch
+1451248-61a1.patch
+1455709-61a1.patch
+1455280-61a1.patch
+1456881-61a1.patch
+1455611-61a1.patch
+1456952-61a1.patch
+1456296-61a1.patch
+1452935-1only-61a1.patch
+1451082-61a1.patch
+1275292-61a1.patch
+1448522-61a1.patch
+1456494-61a1.patch
+1452114-1-61a1.patch
+1452114-2-61a1.patch
+1455795-61a1.patch
+1455016-61a1.patch
+1455019-61a1.patch
+1455028-61a1.patch
+1443555-61a1.patch
+1456435-2a-61a1.patch
+1437842-00-61a1.patch
+1437842-01-61a1.patch
+1437842-02-61a1.patch
+1437842-03-61a1.patch
+1437842-04-61a1.patch
+1437842-05-61a1.patch
+1437842-06-61a1.patch
+1437842-07-61a1.patch
+1437842-08-61a1.patch
+1437842-09-61a1.patch
+1437842-10-61a1.patch
+1437842-11-61a1.patch
+1437842-12-61a1.patch
+1437842-13-61a1.patch
+1457030-61a1.patch
+1456422-61a1.patch
+1440714-16-61a1.patch
+912079-1-61a1.patch
+912079-2-61a1.patch
+912079-3-61a1.patch
+912079-4-61a1.patch
+1457326-61a1.patch
+1451826-01-61a1.patch
+1451826-02-61a1.patch
+1451826-03-61a1.patch
+1451826-04-61a1.patch
+1451826-05-61a1.patch
+1451826-06-61a1.patch
+1451826-07-61a1.patch
+1451826-08-61a1.patch
+1451826-09-61a1.patch
+1451826-10-61a1.patch
+1457125-61a1.patch
+1408412-61a1.patch
+1457475-61a1.patch
+887889-1-61a1.patch
+887889-2-61a1.patch
+887889-3-61a1.patch
+887889-4-61a1.patch
+887889-5-61a1.patch
+887889-6-61a1.patch
+887889-7-61a1.patch
+1455860-61a1.patch
+1456565-61a1.patch
+1425866-61a1.patch
+1410214-1-61a1.patch
+1410214-2-61a1.patch
+1410214-3-61a1.patch
+1451524-2-61a1.patch
+1448944-1-61a1.patch
+1448944-2-61a1.patch
+1456652-61a1.patch
+1434130-2-PARTIAL-61a1.patch
+1449075-2-61a1.patch
+1456259-61a1.patch
+1427011-61a1.patch
+1457600-61a1.patch
+1456875-61a1.patch
+1457193-61a1.patch
+1456508-61a1.patch
+1409815-1-PARTIAL-61a1.patch
+1409815-2-PARTIAL-61a1.patch
+1457365-61a1.patch
+1454728-PARTIAL-61a1.patch
+1456858-61a1.patch
+1454887-1-61a1.patch
+1454887-2-61a1.patch
+1458091-61a1.patch
+1450503-61a1.patch
+1458236-61a1.patch
+1458382-1-61a1.patch
+1456039-1-61a1.patch
+1456039-2-61a1.patch
+1458154-61a1.patch
+1458008-61a1.patch
+1457501-1-61a1.patch
+1457501-2-61a1.patch
+1457743-61a1.patch
+1457412-61a1.patch
+1451511-61a1.patch
+1457765-61a1.patch
+1372381-1no2-61a1.patch
+1372381-3no4-61a1.patch
+1457963-61a1.patch
+1456743-1-61a1.patch
+1456743-2-61a1.patch
+1456743-3-61a1.patch
+1456743-4-61a1.patch
+1458161-61a1.patch
+1437593-02no1-61a1.patch
+1437593-03-61a1.patch
+1437593-04-61a1.patch
+1437593-05-61a1.patch
+1437593-06-61a1.patch
+1437593-07-61a1.patch
+1437593-08-61a1.patch
+1437593-09-61a1.patch
+1437593-10-61a1.patch
+1458173-61a1.patch
+1458217-61a1.patch
+1455603-61a1.patch
+1140152-61a1.patch
+1455610-61a1.patch
+1458567-61a1.patch
+1458198-61a1.patch
+1458456-2-61a1.patch
+1458839-61a1.patch
+1456536-61a1.patch
+1458961-61a1.patch
+1458456-3a-61a1.patch
+1458456-3b-61a1.patch
+1458456-4-61a1.patch
+1458456-5-61a1.patch
+1458456-6-61a1.patch
+1458456-7-61a1.patch
+1458456-8-61a1.patch
+1431434-61a1.patch
+1458456-9-61a1.patch
+1458011-61a1.patch
+1453274-3-61a1.patch
+1457488-61a1.patch
+1458199-61a1.patch
+1433968-3only-61a1.patch
+1454888-61a1.patch
+1451168-1-61a1.patch
+1451168-2-61a1.patch
+1458588-61a1.patch
+1457882-61a1.patch
+1454824-61a1.patch
+1457107-61a1.patch
+1457967-61a1.patch
+1455892-61a1.patch
+1451159-1-61a1.patch
+1451159-2-61a1.patch
+1451159-3-61a1.patch
+1451159-4-61a1.patch
+1455316-61a1.patch
+1459026-61a1.patch
+1458700-2no1-61a1.patch
+1458700-3no4to11-61a1.patch
+NOBUG-20180505-lint-61a1.patch
+1459074-62a1.patch
+1456112-62a1.patch
+888600-1only-61a1.patch
+888600-1aonly-61a1.patch
+1446930-62a1.patch
+1451524-3-62a1.patch
+1457999-1-62a1.patch
+1457999-2-62a1.patch
+1457999-3-62a1.patch
+1457999-4-62a1.patch
+1459609-62a1.patch
+1458973-62a1.patch
+1437533-2-62a1.patch
+1459258-62a1.patch
+1459225-1-62a1.patch
+1459880-1-62a1.patch
+1459880-2-62a1.patch
+1459880-3-62a1.patch
+1459880-4-62a1.patch
+1459880-5-62a1.patch
+1459880-6-62a1.patch
+1459880-7-62a1.patch
+1458646-62a1.patch
+1459611-62a1.patch
+1416289-1-62a1.patch
+1416289-2-62a1.patch
+1416289-3-62a1.patch
+1458029-1-62a1.patch
+1458029-2-62a1.patch
+1456085-62a1.patch
+833098-1-62a1.patch
+1458627-62a1.patch
+1458897-62a1.patch
+1459598-62a1.patch
+1456071-1only-62a1.patch
+1414829-1-62a1.patch
+1414829-2-62a1.patch
+453968-62a1.patch
+1460055-62a1.patch
+1457338-62a1.patch
+1451683-62a1.patch
+1456118-62a1.patch
+1454149-62a1.patch
+1460258-62a1.patch
+1459382-1-62a1.patch
+1459382-2-62a1.patch
+1459382-3-62a1.patch
+1459382-4-62a1.patch
+NOBUG-20180508-hashtable-62a1.patch
+1459384-01-62a1.patch
+1459384-02-62a1.patch
+1459384-03-62a1.patch
+1459384-04-62a1.patch
+1459384-05-62a1.patch
+1459384-06-62a1.patch
+1459384-07-62a1.patch
+1459384-08-62a1.patch
+1459384-09-62a1.patch
+1459384-10-62a1.patch
+1459384-11-62a1.patch
+1459384-12-62a1.patch
+1459384-13-62a1.patch
+1459384-14-62a1.patch
+1459384-15-62a1.patch
+1459384-16-62a1.patch
+1459384-17-62a1.patch
+1459384-18-62a1.patch
+1459384-19-62a1.patch
+1459384-20-62a1.patch
+1459979-62a1.patch
+1460451-62a1.patch
+1374699-1-62a1.patch
+1374699-2-62a1.patch
+1374699-3-62a1.patch
+1374699-4-62a1.patch
+1335148-1-62a1.patch
+1335148-2no3-62a1.patch
+1335148-4-62a1.patch
+1460385-62a1.patch
+1460373-62a1.patch
+1460367-62a1.patch
+1460407-62a1.patch
+1442481-1-62a1.patch
+1442481-2-62a1.patch
+1442481-3-62a1.patch
+1302449-62a1.patch
+1459568-62a1.patch
+1457703-2-62a1.patch
+1401927-62a1.patch
+1460057-62a1.patch
+1456774-62a1.patch
+1459607-62a1.patch
+1434783-62a1.patch
+1459225-2-62a1.patch
+1457359-62a1.patch
+1454640-4-62a1.patch
+1441914-1-62a1.patch
+1441914-2-62a1.patch
+1427660-1a-62a1.patch
+1460402-1-62a1.patch
+1460402-2-62a1.patch
+1460402-3-62a1.patch
+1460636-62a1.patch
+1415202-62a1.patch
+1459220-62a1.patch
+1459127-62a1.patch
+1459552-62a1.patch
+1458325-1-62a1.patch
+1458325-2-62a1.patch
+1460748-1-62a1.patch
+1460629-62a1.patch
+1452715-62a1.patch
+1449033-62a1.patch
+1460966-62a1.patch
+1454667-62a1.patch
+1432410-62a1.patch
+1460341-1-62a1.patch
+1348792-62a1.patch
+1460381-1-62a1.patch
+1460381-2-62a1.patch
+1459940-62a1.patch
+1453990-62a1.patch
+1459850-62a1.patch
+1461034-62a1.patch
+1460381-3-62a1.patch
+1459225-62a1.patch
+1455954-62a1.patch
+1460436-62a1.patch
+1440610-62a1.patch
+1459761-1-62a1.patch
+1460895-62a1.patch
+1430438-2-62a1.patch
+1459633-62a1.patch
+1461339-62a1.patch
+1426124-62a1.patch
+1461053-1-62a1.patch
+1461053-2-62a1.patch
+1460957-1-62a1.patch
+1460957-2-62a1.patch
+1459862-62a1.patch
+1461048-1-62a1.patch
+1461048-2-PARTIAL-62a1.patch
+1454912-2no1-62a1.patch
+1454912-3-62a1.patch
+1454912-4-62a1.patch
+1460690-62a1.patch
+1458878-62a1.patch
+1422930-62a1.patch
+1459893-62a1.patch
+1461337-1-62a1.patch
+1461337-2-62a1.patch
+1375504-62a1.patch
+1461272-62a1.patch
+1431187-62a1.patch
+1461555-1-62a1.patch
+1461555-2-62a1.patch
+1461600-62a1.patch
+1461398-62a1.patch
+1460021-62a1.patch
+1461291-62a1.patch
+1461292-1-62a1.patch
+1461292-2-62a1.patch
+1461027-62a1.patch
+1461319-62a1.patch
+1461751-62a1.patch
+1444956-PARTIAL-62a1.patch
+1461292-3-62a1.patch
+1461928-1-62a1.patch
+1461928-2-62a1.patch
+1461791-1-62a1.patch
+1461791-2-62a1.patch
+1456524-62a1.patch
+1461399-62a1.patch
+1461481-1-62a1.patch
+1461481-2-62a1.patch
+1461554-62a1.patch
+1461556-01-62a1.patch
+1461821-1-62a1.patch
+1461821-2-62a1.patch
+1461556-02-62a1.patch
+1461556-03-62a1.patch
+1461556-04-62a1.patch
+1461301-62a1.patch
+1461605-1-62a1.patch
+1461605-2-62a1.patch
+1461605-3-62a1.patch
+1461689-62a1.patch
+1461383-62a1.patch
+1461221-62a1.patch
+1460997-62a1.patch
+1461590-62a1.patch
+1461795-62a1.patch
+1460647-62a1.patch
+1423767-62a1.patch
+1460003-62a1.patch
+1457499-1-62a1.patch
+1457499-2-62a1.patch
+1457499-3-62a1.patch
+1462261-1-62a1.patch
+1462261-2-62a1.patch
+1450795-2-62a1.patch
+1460098-1-62a1.patch
+1460098-2-62a1.patch
+1460098-3-62a1.patch
+1460098-4-62a1.patch
+1457483-62a1.patch
+1451005-1-62a1.patch
+1451005-2-62a1.patch
+1451005-3no4-62a1.patch
+1461677-62a1.patch
+1461938-01-62a1.patch
+1461938-02-62a1.patch
+1461938-03-62a1.patch
+1461938-04-62a1.patch
+1459761-2-62a1.patch
+1462273-1-62a1.patch
+1462273-2-62a1.patch
+1461432-62a1.patch
+1420350-62a1.patch
+1462444-62a1.patch
+1237182-03-62a1.patch
+1455337-62a1.patch
+1461372-62a1.patch
+1462326-62a1.patch
+1461938-05-62a1.patch
+1461938-06-62a1.patch
+1461938-07-62a1.patch
+1461929-62a1.patch
+1462448-62a1.patch
+1461556-05-62a1.patch
+1461556-06-62a1.patch
+NOBUG-20180516-gccice-62a1.patch
+1461556-07-62a1.patch
+1461556-08-62a1.patch
+1461556-09-62a1.patch
+1461556-10-62a1.patch
+1461556-11-62a1.patch
+1462540-1-62a1.patch
+1462540-2-62a1.patch
+1462540-3-62a1.patch
+1462544-1-62a1.patch
+1462544-2-62a1.patch
+1461556-12-62a1.patch
+1461556-13-62a1.patch
+1461376-62a1.patch
+1462751-1-62a1.patch
+1462751-2-62a1.patch
+1462751-3-62a1.patch
+1461178-62a1.patch
+1461672-62a1.patch
+1461888-62a1.patch
+1462353-62a1.patch
+1461181-62a1.patch
+1461836-1-62a1.patch
+1461836-2-62a1.patch
+1462280-62a1.patch
+1462337-62a1.patch
+1460883-62a1.patch
+1456512-1-62a1.patch
+1456518-62a1.patch
+1456512-2-62a1.patch
+1462486-62a1.patch
+1457162-1-62a1.patch
+1457162-2-62a1.patch
+1462157-62a1.patch
+1462358-62a1.patch
+1456552-62a1.patch
+1442481-4-62a1.patch
+1442481-5-62a1.patch
+1442722-1-PARTIAL-62a1.patch
+1441876-62a1.patch
+NOBUG-20231031-formattingfixes-25319.patch
+1462341-62a1.patch
+1461938-08-62a1.patch
+1461938-09-62a1.patch
+1461938-10-62a1.patch
+1461938-11-62a1.patch
+1461938-12-62a1.patch
+1461938-13-62a1.patch
+1461938-14-62a1.patch
+1461938-15-62a1.patch
+1462335-62a1.patch
+1462333-1-62a1.patch
+1462333-2-62a1.patch
+1463378-62a1.patch
+1462566-62a1.patch
+1461012-62a1.patch
+1456512-3-62a1.patch
+1427610-1-62a1.patch
+1427610-2-62a1.patch
+1427610-3-62a1.patch
+1427610-4-62a1.patch
+1461938-16-62a1.patch
+1461938-17-62a1.patch
+1461938-18-62a1.patch
+1461938-19-62a1.patch
+1461938-20-62a1.patch
+1461938-21-62a1.patch
+1457059-62a1.patch
+1461938-22-62a1.patch
+1461938-23-62a1.patch
+1461938-24-62a1.patch
+1461938-25-62a1.patch
+1461938-26-62a1.patch
+1461938-27-62a1.patch
+1461938-28-62a1.patch
+1461938-29-62a1.patch
+1461938-30-62a1.patch
+1438556-2-fix-whitespace-62a1.patch
+1462939-1-62a1.patch
+1420894-62a1.patch
+1463717-62a1.patch
+1463723-62a1.patch
+1461938-31-62a1.patch
+1461938-32-62a1.patch
+1461938-33-62a1.patch
+1461938-34-62a1.patch
+1463847-1-62a1.patch
+1463847-2-62a1.patch
+1463939-1-62a1.patch
+1463939-2-62a1.patch
+1463939-3-62a1.patch
+1463939-4-62a1.patch
+1366287-1_0-62a1.patch
+1463939-5-62a1.patch
+1463923-1-62a1.patch
+1463923-2-62a1.patch
+1366287-2_0-62a1.patch
+1366287-2_1-62a1.patch
+1366287-3-62a1.patch
+1366287-4-62a1.patch
+1366287-5-62a1.patch
+1366287-6-62a1.patch
+1464002-62a1.patch
+1463501-62a1.patch
+1464075-62a1.patch
+1460341-2-62a1.patch
+1461938-35-62a1.patch
+1461938-36-62a1.patch
+1461938-37-62a1.patch
+1461938-38-62a1.patch
+1461938-39-62a1.patch
+1461938-40-62a1.patch
+1463371-62a1.patch
+1401842-62a1.patch
+1464092-62a1.patch
+1463373-62a1.patch
+1461727-62a1.patch
+1463465-62a1.patch
+1462958-62a1.patch
+1436242-62a1.patch
+1463036-2-62a1.patch
+1460600-62a1.patch
+1345875-62a1.patch
+1463425-2-62a1.patch
+1463425-3-62a1.patch
+1463425-4-62a1.patch
+1463425-5-62a1.patch
+1463425-6-62a1.patch
+1346026-1-62a1.patch
+1346026-2-62a1.patch
+1346026-3-62a1.patch
+1463921-1only-62a1.patch
+1460838-62a1.patch
+1453765-62a1.patch
+1461268-2only-62a1.patch
+1452653-2-62a1.patch
+1463924-62a1.patch
+1144632-62a1.patch
+1464128-62a1.patch
+1462138-1-62a1.patch
+1462138-2-62a1.patch
+1464088-62a1.patch
+1450607-1-62a1.patch
+1450607-2-62a1.patch
+1450607-3-62a1.patch
+1382683-1-62a1.patch
+1382683-2-62a1.patch
+1382683-3-62a1.patch
+1460796-62a1.patch
+1459577-62a1.patch
+1464368-62a1.patch
+1463645-62a1.patch
+1464036-1-62a1.patch
+1452588-62a1.patch
+1464321-62a1.patch
+1464134-1-62a1.patch
+1463884-1-62a1.patch
+1457110-62a1.patch
+1461304-62a1.patch
+1464366-62a1.patch
+1464656-62a1.patch
+1464751-62a1.patch
+1464757-62a1.patch
+1203273-2-62a1.patch
+1464387-62a1.patch
+1464494-1-62a1.patch
+1464494-2-62a1.patch
+1465039-1-62a1.patch
+1463637-62a1.patch
+1388721-62a1.patch
+1463884-2-62a1.patch
+1463884-3-62a1.patch
+1464381-62a1.patch
+1464809-62a1.patch
+1463840-62a1.patch
+1457661-1-62a1.patch
+1457661-2-62a1.patch
+1454630-1-62a1.patch
+1454630-2-62a1.patch
+1454630-3-62a1.patch
+1454630-4-62a1.patch
+1435828-1-62a1.patch
+1435828-2-62a1.patch
+1464472-1-62a1.patch
+1464912-62a1.patch
+1047514-62a1.patch
+1464954-1-62a1.patch
+1464249-62a1.patch
+1464161-62a1.patch
+1464202-62a1.patch
+1454868-62a1.patch
+1464082-62a1.patch
+1465274-62a1.patch
+1464758-62a1.patch
+1253064-62a1.patch
+1464537-1-62a1.patch
+1464537-2-62a1.patch
+1457590-1-62a1.patch
+1457590-2-62a1.patch
+1457590-3-62a1.patch
+1465245-62a1.patch
+1388013-1-62a1.patch
+1388013-2-62a1.patch
+1388013-3-62a1.patch
+1462489-4only-62a1.patch
+1465807-62a1.patch
+1464477-62a1.patch
+1459900-1-62a1.patch
+1464036-2-62a1.patch
+1464789-62a1.patch
+1464134-2-62a1.patch
+1464134-3-62a1.patch
+1464134-4-62a1.patch
+1464134-5-62a1.patch
+1464134-6-62a1.patch
+1464134-7-62a1.patch
+1464134-8-62a1.patch
+1465396-62a1.patch
+1464266-62a1.patch
+1465173-62a1.patch
+1465002-62a1.patch
+1465037-62a1.patch
+1459845-1-62a1.patch
+1459845-2-62a1.patch
+1459845-3-62a1.patch
+1459845-4-62a1.patch
+1459845-5-62a1.patch
+1459845-6-62a1.patch
+1460126-1-62a1.patch
+1460126-2-62a1.patch
+1460126-3-62a1.patch
+1460126-4-62a1.patch
+1459845-7-62a1.patch
+1464134-9-62a1.patch
+1464374-2no1-62a1.patch
+1464374-3-62a1.patch
+1464374-4-62a1.patch
+1464374-5-62a1.patch
+1464374-6-62a1.patch
+1464374-7-62a1.patch
+1464374-8-62a1.patch
+1464378-9-62a1.patch
+1465472-1-62a1.patch
+1465011-62a1.patch
+1465062-62a1.patch
+1464986-1-62a1.patch
+1464986-2-62a1.patch
+1463961-62a1.patch
+1444597-62a1.patch
+1465585-1-std-62a1.patch
+1465585-2-std-62a1.patch
+1465585-3-std-62a1.patch
+1465695-62a1.patch
+1465163-62a1.patch
+1465002-2-62a1.patch
+1466166-62a1.patch
+1466050-62a1.patch
+1465770-1-62a1.patch
+1465770-2-62a1.patch
+1466168-PARTIAL-js-62a1.patch
+1466083-1-62a1.patch
+1466083-2-62a1.patch
+1466083-3-62a1.patch
+1466083-4-62a1.patch
+1466083-5-62a1.patch
+1466083-6-62a1.patch
+1461050-62a1.patch
+1464772-1-62a1.patch
+1464772-2-62a1.patch
+1464772-3-62a1.patch
+1429818-1-62a1.patch
+1462693-62a1.patch
+1464794-62a1.patch
+1459274-62a1.patch
+1464680-62a1.patch
+1463581-2-62a1.patch
+1466066-62a1.patch
+1237182-13-62a1.patch
+1237182-14-62a1.patch
+1465580-62a1.patch
+1465587-62a1.patch
+1466008-1-62a1.patch
+1466008-2-62a1.patch
+1466095-62a1.patch
+1463596-62a1.patch
+1465585-4-std-62a1.patch
+1270217-62a1.patch
+1463834-62a1.patch
+1466060-62a1.patch
+1437526-62a1.patch
+1463184-62a1.patch
+1466054-1-62a1.patch
+1466054-2-62a1.patch
+1465996-62a1.patch
+1464773-62a1.patch
+1465060-1-std-62a1.patch
+1465060-2-std-62a1.patch
+1466171-62a1.patch
+1465860-62a1.patch
+1459860-62a1.patch
+1466693-62a1.patch
+1464845-62a1.patch
+1465836-62a1.patch
+1466789-1-62a1.patch
+1466789-2-62a1.patch
+1457482-1-62a1.patch
+1464954-2-62a1.patch
+1455138-62a1.patch
+1443086-62a1.patch
+1464869-03-62a1.patch
+1464869-08-62a1.patch
+1464869-09-62a1.patch
+1464869-11-62a1.patch
+1464869-17-62a1.patch
+1465728-1-62a1.patch
+1465728-2-62a1.patch
+1465728-3-62a1.patch
+1464772-5-62a1.patch
+1466792-62a1.patch
+1434983-62a1.patch
+1450781-62a1.patch
+1467282-62a1.patch
+1417920-62a1.patch
+1466487-62a1.patch
+1466083-7-62a1.patch
+1466083-8-62a1.patch
+1466083-9-62a1.patch
+1461948-1-62a1.patch
+1461948-2-62a1.patch
+1466931-62a1.patch
+1461948-3-62a1.patch
+1461948-4-62a1.patch
+1461948-5-62a1.patch
+1459754-62a1.patch
+1460154-1-62a1.patch
+1460154-2-62a1.patch
+1466189-1-62a1.patch
+1466189-2-62a1.patch
+1467052-62a1.patch
+1457560-62a1.patch
+1467311-62a1.patch
+1467605-62a1.patch
+1462498-62a1.patch
+1466909-62a1.patch
+1467334-62a1.patch
+1467335-62a1.patch
+1467336-01-62a1.patch
+1467336-02-62a1.patch
+1467336-03-62a1.patch
+1467336-04-62a1.patch
+1467336-05-62a1.patch
+1467336-06-62a1.patch
+1467336-07-62a1.patch
+1467336-09-62a1.patch
+1467071-62a1.patch
+1461375-62a1.patch
+1445025-2-62a1.patch
+1445025-3-62a1.patch
+1437942-62a1.patch
+1439383-62a1.patch
+1467938-62a1.patch
+1465709-1-62a1.patch
+1467403-62a1.patch
+1467496-62a1.patch
+1467658-2-62a1.patch
+1466893-1-62a1.patch
+1466893-2-62a1.patch
+1468272-62a1.patch
+1435813-1a-62a1.patch
+1329321-62a1.patch
+1308735-62a1.patch
+1467336-10-62a1.patch
+1467336-11-62a1.patch
+1467336-12-62a1.patch
+1467336-13-62a1.patch
+1467336-14-62a1.patch
+1467336-15-62a1.patch
+1467336-16-62a1.patch
+1467336-17-62a1.patch
+1467336-18-62a1.patch
+1467336-19-62a1.patch
+1467336-20-62a1.patch
+1467336-21-62a1.patch
+1467336-22-62a1.patch
+1467336-23-62a1.patch
+1468449-1-62a1.patch
+1468449-2-62a1.patch
+1465350-62a1.patch
+1465081-62a1.patch
+1462286-62a1.patch
+1464790-62a1.patch
+1468629-62a1.patch
+1468984-62a1.patch
+1468786-62a1.patch
+1466633-62a1.patch
+1469593-62a1.patch
+1469444-62a1.patch
+1469469-62a1.patch
+1450085-1-62a1.patch
+1450085-2-62a1.patch
+1450085-3-62a1.patch
+1363214-62a1.patch
+1467142-62a1.patch
+1466501-1-62a1.patch
+1466501-2-62a1.patch
+1466501-3-62a1.patch
+1466458-1-62a1.patch
+1466458-2-62a1.patch
+1465472-2-62a1.patch
+1466121-1-62a1.patch
+1466121-2-62a1.patch
+1466121-3-62a1.patch
+1466121-4-62a1.patch
+1466121-5-62a1.patch
+1466121-6-62a1.patch
+1466121-7-62a1.patch
+1468137-62a1.patch
+1468219-62a1.patch
+1468252-1-62a1.patch
+1468252-2-62a1.patch
+1468252-3-62a1.patch
+1468252-4-62a1.patch
+1468252-5-62a1.patch
+1468252-6-62a1.patch
+1468252-7-62a1.patch
+1468252-8-62a1.patch
+1343620-62a1.patch
+1467752-62a1.patch
+1467751-62a1.patch
+1319228-3only-62a1.patch
+1319228-6only-62a1.patch
+1468830-62a1.patch
+1464928-62a1.patch
+1468328-1-62a1.patch
+1454187-62a1.patch
+1465887-62a1.patch
+1467882-62a1.patch
+1351354-62a1.patch
+1468867-1-62a1.patch
+1468867-2-62a1.patch
+1468328-2-62a1.patch
+1389251-1-62a1.patch
+1389251-2no3-62a1.patch
+1409018-1-62a1.patch
+1409018-2no3-62a1.patch
+1467039-62a1.patch
+1466254-1-62a1.patch
+1466254-2no3-62a1.patch
+1467319-1only-62a1.patch
+1466401-62a1.patch
+1467274-62a1.patch
+1468406-1-62a1.patch
+1468406-2-62a1.patch
+1468406-3-62a1.patch
+1468860-62a1.patch
+1459900-2-62a1.patch
+1459900-3-62a1.patch
+1469067-62a1.patch
+948882-62a1.patch
+1467307-62a1.patch
+1466910-1only-62a1.patch
+1469712-62a1.patch
+1467275-62a1.patch
+1467276-62a1.patch
+1467842-1-62a1.patch
+1467842-2-62a1.patch
+1443722-1-62a1.patch
+1443722-2-62a1.patch
+1467183-62a1.patch
+1444734-62a1.patch
+1437600-1-62a1.patch
+1441098-1-62a1.patch
+1441098-2-62a1.patch
+1441098-3-62a1.patch
+1441098-4-62a1.patch
+1468792-62a1.patch
+1468406-4-62a1.patch
+1466503-1-62a1.patch
+1466503-2-62a1.patch
+1466503-3-62a1.patch
+1444202-62a1.patch
+1465709-2-62a1.patch
+1468811-1-62a1.patch
+1468811-2-62a1.patch
+1468811-3-62a1.patch
+1470055-62a1.patch
+1437600-2-62a1.patch
+1470053-62a1.patch
+1453795-36-62a1.patch
+1453795-39-62a1.patch
+1470181-62a1.patch
+1469006-62a1.patch
+1465693-62a1.patch
+1480521-BACKOUT-60.patch
+1453795-41-62a1.patch
+1469640-62a1.patch
+1469786-62a1.patch
+1470492-62a1.patch
+1470494-1-62a1.patch
+1470494-2-62a1.patch
+1470488-62a1.patch
+1470552-62a1.patch
+1466661-62a1.patch
+1466826-62a1.patch
+1466363-62a1.patch
+1467753-62a1.patch
+1467438-4-62a1.patch
+1467438-1-62a1.patch
+1467438-2-62a1.patch
+1467438-3-62a1.patch
+1467438-5-62a1.patch
+1450261-1-62a1.patch
+1469297-63a1.patch
+1468816-1-63a1.patch
+1468816-2-63a1.patch
+1442765-1-63a1.patch
+1442765-2-63a1.patch
+1466626-2no1-63a1.patch
+1466626-3-63a1.patch
+1398839-63a1.patch
+1407143-1-63a1.patch
+1407143-2-63a1.patch
+1407143-3-63a1.patch
+1407143-4-63a1.patch
+1407143-5-63a1.patch
+1407143-6-63a1.patch
+1407143-7-63a1.patch
+1466211-1-63a1.patch
+1466211-2-63a1.patch
+1466211-3-63a1.patch
+1466211-4-63a1.patch
+1466211-5-63a1.patch
+1466211-6-63a1.patch
+1466211-7-63a1.patch
+1469999-2-63a1.patch
+1469999-3-63a1.patch
+1469999-4-63a1.patch
+1428362-1-63a1.patch
+1428362-2-63a1.patch
+1428362-3-63a1.patch
+1309172-63a1.patch
+1388016-3only-63a1.patch
+1471096-1-63a1.patch
+1471096-2-SIMPLIFIED-63a1.patch
+1471132-1-63a1.patch
+1471132-2-63a1.patch
+1471132-3-63a1.patch
+1471132-4-63a1.patch
+1471177-63a1.patch
+1470449-63a1.patch
+1471261-1-63a1.patch
+1471261-2-63a1.patch
+1464257-63a1.patch
+1470250-1-63a1.patch
+1470250-2-63a1.patch
+1470250-3-63a1.patch
+1470250-4-63a1.patch
+1470250-5-63a1.patch
+1470250-6-63a1.patch
+1470250-7-63a1.patch
+1464782-1-63a1.patch
+1464782-2no34-63a1.patch
+1470522-63a1.patch
+1470904-1-63a1.patch
+1470904-2-63a1.patch
+1470992-63a1.patch
+1470732-1-63a1.patch
+1470732-2-63a1.patch
+1470732-3-63a1.patch
+1470890-63a1.patch
+1471361-1-63a1.patch
+1471234-63a1.patch
+1471589-63a1.patch
+1471089-63a1.patch
+1470793-63a1.patch
+1471131-63a1.patch
+1447591-1-63a1.patch
+1447591-2-63a1.patch
+1471169-63a1.patch
+1471272-63a1.patch
+1466464-1-63a1.patch
+1471841-63a1.patch
+612141-63a1.patch
+1471844-63a1.patch
+1412200-63a1.patch
+1471924-1-63a1.patch
+1471924-2-63a1.patch
+1471924-3-63a1.patch
+1471900-63a1.patch
+1471289-63a1.patch
+1459900-4-63a1.patch
+1459900-5-63a1.patch
+1459900-6-63a1.patch
+1467415-63a1.patch
+1471310-1-63a1.patch
+1471310-2-63a1.patch
+1471931-1-63a1.patch
+1471931-2-63a1.patch
+1471931-3-63a1.patch
+1471931-4-63a1.patch
+1471931-5-63a1.patch
+1471788-63a1.patch
+NOBUG-20180629-value-63a1.patch
+NOBUG-20180629-testingfunctions-63a1.patch
+1471463-63a1.patch
+1471464-63a1.patch
+1471465-63a1.patch
+1464782-5-63a1.patch
+1471491-63a1.patch
+1469441-1-63a1.patch
+1469441-2-63a1.patch
+1471542-63a1.patch
+1471164-63a1.patch
+928735-63a1.patch
+1471486-1only-63a1.patch
+1471285-63a1.patch
+1471620-63a1.patch
+1467336-24-63a1.patch
+1467336-25-63a1.patch
+1472031-1-63a1.patch
+1472031-2-63a1.patch
+1472031-3-63a1.patch
+1472031-4-63a1.patch
+1472031-5-63a1.patch
+1472031-6-63a1.patch
+1472066-1-63a1.patch
+1472066-2-63a1.patch
+1472431-63a1.patch
+1450261-2-63a1.patch
+1450261-3-63a1.patch
+1450261-4-63a1.patch
+1461616-63a1.patch
+1472603-63a1.patch
+1471415-63a1.patch
+1472001-63a1.patch
+1472030-63a1.patch
+1400266-63a1.patch
+1453751-PARTIAL-63a1.patch
+1472201-63a1.patch
+1470608-63a1.patch
+1470716-63a1.patch
+1471171-1-63a1.patch
+1471171-2-63a1.patch
+1468394-63a1.patch
+1351663-1-63a1.patch
+1351663-2-63a1.patch
+1351663-3-63a1.patch
+1467148-63a1.patch
+1472502-63a1.patch
+1472132-63a1.patch
+1472130-1-63a1.patch
+1472130-2-63a1.patch
+1413794-63a1.patch
+1472805-63a1.patch
+1472569-63a1.patch
+1463163-63a1.patch
+1466461-63a1.patch
+1467404-63a1.patch
+1464475-63a1.patch
+1468750-63a1.patch
+1472124-63a1.patch
+1472974-63a1.patch
+1472233-1-63a1.patch
+1472233-2-63a1.patch
+1455770-63a1.patch
+1472721-63a1.patch
+1471622-1-63a1.patch
+1471622-2-63a1.patch
+1471028-1-63a1.patch
+1472789-63a1.patch
+1460022-01-63a1.patch
+1460022-02-63a1.patch
+1460022-03-63a1.patch
+1460022-04-63a1.patch
+1460022-06-63a1.patch
+1460022-08-63a1.patch
+1460022-09-63a1.patch
+1460022-10-63a1.patch
+1460022-11-63a1.patch
+1460022-12-63a1.patch
+1460022-13-63a1.patch
+1472806-1-63a1.patch
+1472806-2-63a1.patch
+1472806-3-63a1.patch
+1471028-2-63a1.patch
+1473331-63a1.patch
+1397807-63a1.patch
+1403027-63a1.patch
+1471625-1-63a1.patch
+1471625-2-63a1.patch
+1471625-3-63a1.patch
+1473301-63a1.patch
+1473024-63a1.patch
+1465505-63a1.patch
+1473255-63a1.patch
+1472634-1-63a1.patch
+1472634-2-63a1.patch
+1472633-63a1.patch
+1473003-1-63a1.patch
+1473003-2-63a1.patch
+1457168-63a1.patch
+1426909-1-63a1.patch
+1472066-3-63a1.patch
+1472066-4-63a1.patch
+1434598-1-63a1.patch
+1434598-2-63a1.patch
+1434598-3-63a1.patch
+1434598-4-63a1.patch
+1434598-5-63a1.patch
+1434598-6-63a1.patch
+1473000-63a1.patch
+1434598-63a1.patch
+1473436-1-63a1.patch
+1473436-2-63a1.patch
+1473121-63a1.patch
+1472199-1-63a1.patch
+1472199-2-63a1.patch
+1473308-63a1.patch
+1473954-63a1.patch
+1468207-63a1.patch
+1469088-63a1.patch
+1469091-63a1.patch
+1467897-63a1.patch
+1473371-63a1.patch
+1472666-63a1.patch
+1473231-1-63a1.patch
+1473231-2-63a1.patch
+1473231-3-63a1.patch
+1472638-63a1.patch
+1471949-63a1.patch
+1469323-63a1.patch
+1473297-63a1.patch
+1418246-63a1.patch
+1473218-63a1.patch
+1472639-63a1.patch
+1447856-63a1.patch
+1471091-1-63a1.patch
+1471091-2-63a1.patch
+1472495-63a1.patch
+1471556-63a1.patch
+1333800-1only-63a1.patch
+1473256-63a1.patch
+1473970-1-63a1.patch
+1473970-2-63a1.patch
+1473970-3-63a1.patch
+1473970-4-63a1.patch
+1471361-2-63a1.patch
+1473818-63a1.patch
+1474348-1-63a1.patch
+1474348-2-63a1.patch
+1466979-63a1.patch
+1468547-3only-63a1.patch
+1458109-63a1.patch
+1444171-1-63a1.patch
+1444171-2-63a1.patch
+1444171-3-63a1.patch
+1444171-4-63a1.patch
+1444171-5-63a1.patch
+1463190-63a1.patch
+1469152-63a1.patch
+1312864-63a1.patch
+1474531-63a1.patch
+1443411-63a1.patch
+1473453-1-63a1.patch
+1473453-2-63a1.patch
+1473453-3-63a1.patch
+1473727-63a1.patch
+1413922-1-63a1.patch
+1413922-2-PARTIAL-63a1.patch
+1443471-2-63a1.patch
+1474786-63a1.patch
+1474605-63a1.patch
+1468536-63a1.patch
+1474522-63a1.patch
+1052582-1-63a1.patch
+1052582-2-63a1.patch
+1460489-0-63a1.patch
+1460489-1-63a1.patch
+1460489-2-63a1.patch
+1460489-3-63a1.patch
+1460489-4-63a1.patch
+1460489-5-63a1.patch
+1460489-6-63a1.patch
+1472734-63a1.patch
+1474904-63a1.patch
+1464829-2-63a1.patch
+1471134-1-63a1.patch
+1471134-2-63a1.patch
+1471134-3-63a1.patch
+1471134-4-63a1.patch
+1471134-5-63a1.patch
+1469044-1-63a1.patch
+1469044-2-63a1.patch
+1469044-3-63a1.patch
+NOBUG-20180710-floatregister-25319.patch
+1464472-2-63a1.patch
+1462939-2-63a1.patch
+1472291-1-63a1.patch
+1472291-2-63a1.patch
+1475461-1-63a1.patch
+1475461-2-63a1.patch
+NOBUG-20180712-typetraits-63a1.patch
+1474871-63a1.patch
+1475067-63a1.patch
+1475058-63a1.patch
+1475210-63a1.patch
+1475504-PARTIAL-63a1.patch
+1472716-1-63a1.patch
+1472490-63a1.patch
+1475649-1-63a1.patch
+1475226-63a1.patch
+1469223-63a1.patch
+1475642-63a1.patch
+1448976-63a1.patch
+1475650-63a1.patch
+1473956-63a1.patch
+1473587-63a1.patch
+1475464-63a1.patch
+1452762-63a1.patch
+1475968-63a1.patch
+1448980-0-63a1.patch
+1448980-1-63a1.patch
+1476003-63a1.patch
+1475649-2-63a1.patch
+1428709-1-63a1.patch
+1428709-2-63a1.patch
+1428709-3-63a1.patch
+1475443-63a1.patch
+1474024-63a1.patch
+1475335-63a1.patch
+1475660-63a1.patch
+1475980-63a1.patch
+1290972-63a1.patch
+1473217-2-63a1.patch
+1473217-3-63a1.patch
+1475882-01-63a1.patch
+1475882-02-63a1.patch
+1475882-03-63a1.patch
+1475882-04-63a1.patch
+1475882-05-63a1.patch
+1475882-06-63a1.patch
+1475882-07-63a1.patch
+1475882-08-63a1.patch
+1475882-09-63a1.patch
+1475882-10-63a1.patch
+1475882-11-63a1.patch
+1468273-1-63a1.patch
+1468273-2-63a1.patch
+1468273-3-63a1.patch
+1468273-4-63a1.patch
+1468273-5-63a1.patch
+1468273-6-63a1.patch
+1468273-7-63a1.patch
+1468273-8-63a1.patch
+1476012-1-63a1.patch
+1476012-2-63a1.patch
+1476012-3-63a1.patch
+1476012-4-63a1.patch
+1476012-5-63a1.patch
+1476012-6-63a1.patch
+1476012-7-63a1.patch
+1476012-8-63a1.patch
+1418971-1-63a1.patch
+1476012-9-63a1.patch
+1469330-63a1.patch
+1469350-63a1.patch
+1440481-1-63a1.patch
+1440481-2-63a1.patch
+1474385-1-63a1.patch
+1474385-2-63a1.patch
+1474385-3-63a1.patch
+1474385-4-63a1.patch
+1471954-63a1.patch
+NOBUG-20180717-gcc-63a1.patch
+1476548-63a1.patch
+1476174-63a1.patch
+1476030-1-63a1.patch
+1476390-63a1.patch
+1476762-63a1.patch
+1476409-63a1.patch
+1476011-63a1.patch
+1463979-0-63a1.patch
+1463979-1-63a1.patch
+1473289-63a1.patch
+1470026-63a1.patch
+NOBUG-20180719-debugdoc-63a1.patch
+1426909-2-63a1.patch
+1476875-63a1.patch
+1471339-3-63a1.patch
+1471339-5-63a1.patch
+1471339-6-63a1.patch
+1354232-1-63a1.patch
+1354232-2-63a1.patch
+1354232-3-63a1.patch
+1476383-63a1.patch
+NOBUG-20180720-tokenstream-63a1.patch
+1476874-63a1.patch
+1379704-63a1.patch
+1264876-63a1.patch
+1413418-63a1.patch
+1476278-63a1.patch
+1477219-63a1.patch
+1476866-01-63a1.patch
+1476866-02-63a1.patch
+1476866-03-63a1.patch
+1476866-04-63a1.patch
+1476866-05-63a1.patch
+1476866-06-63a1.patch
+1476866-07-63a1.patch
+1476866-08-63a1.patch
+1467798-63a1.patch
+1476500-1-63a1.patch
+1476500-2-63a1.patch
+1476500-3-63a1.patch
+1456006-1-63a1.patch
+1456006-2-63a1.patch
+1477019-63a1.patch
+1475678-01-63a1.patch
+1475678-02-63a1.patch
+1475678-03-63a1.patch
+1475678-04-63a1.patch
+1475678-05-63a1.patch
+1475678-06-63a1.patch
+1475678-07-63a1.patch
+1475678-08-63a1.patch
+1475678-09-63a1.patch
+1475678-10-63a1.patch
+1475678-11-63a1.patch
+1475678-12-63a1.patch
+1475678-13-63a1.patch
+1475678-14-63a1.patch
+1449986-63a1.patch
+1477381-63a1.patch
+1475559-1-63a1.patch
+1309552-63a1.patch
+1476866-09-63a1.patch
+1476866-10-63a1.patch
+1476866-11-63a1.patch
+1476866-12-63a1.patch
+1476866-13-63a1.patch
+1476866-14-63a1.patch
+1476866-15-63a1.patch
+1475943-63a1.patch
+1476657-63a1.patch
+1472681-63a1.patch
+1477375-63a1.patch
+1476953-63a1.patch
+1470115-63a1.patch
+1323381-63a1.patch
+1477579-1-63a1.patch
+1477579-2-63a1.patch
+1477579-3-63a1.patch
+1477579-4-63a1.patch
+1468514-63a1.patch
+1477979-63a1.patch
+1447932-63a1.patch
+1473667-63a1.patch
+1472177-63a1.patch
+1243108-63a1.patch
+1477047-63a1.patch
+1477332-63a1.patch
+1476790-63a1.patch
+1476124-63a1.patch
+1477329-63a1.patch
+1477073-63a1.patch
+1476955-63a1.patch
+1476423-63a1.patch
+1438727-00-63a1.patch
+1438727-01-63a1.patch
+1438727-02-63a1.patch
+1438727-03-63a1.patch
+1438727-04-63a1.patch
+1438727-05-63a1.patch
+1438727-06-63a1.patch
+1438727-07-63a1.patch
+1438727-08-63a1.patch
+1477010-63a1.patch
+1477621-0-63a1.patch
+1477621-1-63a1.patch
+1477621-2-63a1.patch
+1477621-3-63a1.patch
+1477621-4-63a1.patch
+1467273-63a1.patch
+1434305-01-63a1.patch
+1434305-02-63a1.patch
+1434305-03-63a1.patch
+1434305-04-63a1.patch
+1434305-05-63a1.patch
+1434305-06-63a1.patch
+1434305-07-PARTIAL-63a1.patch
+1434305-08-63a1.patch
+1434305-09-63a1.patch
+1434305-10-63a1.patch
+1434305-11-63a1.patch
+1434305-12-63a1.patch
+1434305-13-63a1.patch
+1434305-14-63a1.patch
+NOBUG-20180724-registersets-63a1.patch
+1426827-63a1.patch
+1478343-3-63a1.patch
+1478070-63a1.patch
+1477343-63a1.patch
+1478000-1-63a1.patch
+1476427-1-63a1.patch
+1476427-2-63a1.patch
+1476427-3-63a1.patch
+1473423-63a1.patch
+1478020-63a1.patch
+1478045-1-63a1.patch
+1478045-2-63a1.patch
+1478045-3-63a1.patch
+1478045-4-63a1.patch
+1478045-5-63a1.patch
+1478045-6-63a1.patch
+1478170-01-63a1.patch
+1478170-02-63a1.patch
+1478170-03-63a1.patch
+1478170-04-63a1.patch
+1478170-05-63a1.patch
+1478170-06-63a1.patch
+1478170-07-63a1.patch
+1478170-08-63a1.patch
+1478170-09-63a1.patch
+1478170-10-63a1.patch
+1478170-11-63a1.patch
+1478170-12-63a1.patch
+1478170-13-63a1.patch
+1478170-14-63a1.patch
+1476239-1-63a1.patch
+1476239-2-63a1.patch
+1476239-3-63a1.patch
+1476239-4-63a1.patch
+1438727-09-63a1.patch
+1438727-10-63a1.patch
+1438727-11-63a1.patch
+1438727-12-63a1.patch
+1438727-13-63a1.patch
+1438727-14-63a1.patch
+1438727-15-63a1.patch
+1438727-16-63a1.patch
+1416723-1-63a1.patch
+1416723-2-63a1.patch
+1477761-2only-63a1.patch
+1477742-63a1.patch
+1467022-63a1.patch
+1478927-63a1.patch
+1478923-63a1.patch
+1478919-2only-63a1.patch
+1467673-63a1.patch
+1467523-1-63a1.patch
+1448277-63a1.patch
+1478903-63a1.patch
+1476263-63a1.patch
+1478097-1-63a1.patch
+1478000-2-63a1.patch
+1475277-63a1.patch
+1478616-1-63a1.patch
+1478616-2-63a1.patch
+1472178-63a1.patch
+1470985-1-63a1.patch
+1470985-2-63a1.patch
+1470985-3-63a1.patch
+1476405-3-63a1.patch
+1478097-2-63a1.patch
+1472975-63a1.patch
+1465798-63a1.patch
+1409276-1-63a1.patch
+1409276-2-63a1.patch
+1409276-3-63a1.patch
+1409276-4-63a1.patch
+1479204-63a1.patch
+1472121-63a1.patch
+1478036-63a1.patch
+1479076-63a1.patch
+1478943-63a1.patch
+1438727-17-63a1.patch
+1438727-18-63a1.patch
+1438727-19-63a1.patch
+1438727-20-63a1.patch
+1438727-21-63a1.patch
+1438727-22-63a1.patch
+1477632-63a1.patch
+1478587-01-63a1.patch
+1478587-02-63a1.patch
+1478587-03-63a1.patch
+1478587-04-63a1.patch
+1478587-05-63a1.patch
+1478587-06-63a1.patch
+1478587-07-63a1.patch
+1478587-08-63a1.patch
+1478587-09-63a1.patch
+1478587-10-63a1.patch
+1478892-1-63a1.patch
+1477626-1-63a1.patch
+1477626-2-63a1.patch
+1477626-3-63a1.patch
+1477626-4-63a1.patch
+1477626-5-63a1.patch
+1477157-63a1.patch
+NOBUG-20180731-jorendb-63a1.patch
+1477626-6-63a1.patch
+1477626-7-63a1.patch
+1477626-8-63a1.patch
+1478402-63a1.patch
+1479388-63a1.patch
+1478404-63a1.patch
+1478126-63a1.patch
+1478902-1-63a1.patch
+1478902-2-63a1.patch
+1478902-3-63a1.patch
+1478854-63a1.patch
+1479360-63a1.patch
+1478393-1-63a1.patch
+1478393-2-63a1.patch
+1475228-1-63a1.patch
+1475228-2-63a1.patch
+1475228-3-63a1.patch
+1475228-4-63a1.patch
+1475228-5-63a1.patch
+1475228-6-63a1.patch
+1475228-7-63a1.patch
+1478499-1-63a1.patch
+1478499-3no2-63a1.patch
+1478499-4-63a1.patch
+1478499-5no6-63a1.patch
+1461386-63a1.patch
+1473523-1-63a1.patch
+1473523-2-63a1.patch
+1480233-63a1.patch
+1478896-63a1.patch
+1479954-63a1.patch
+1478879-1-63a1.patch
+1478879-2-63a1.patch
+1478879-3-63a1.patch
+1478879-4-63a1.patch
+1478879-5-63a1.patch
+1478879-7-63a1.patch
+1478879-8-63a1.patch
+1478879-9-63a1.patch
+1477090-63a1.patch
+1317481-63a1.patch
+1469965-63a1.patch
+1475446-63a1.patch
+1426176-63a1.patch
+1476034-63a1.patch
+1479851-63a1.patch
+1479456-63a1.patch
+1480370-63a1.patch
+1434281-63a1.patch
+1478986-63a1.patch
+1444141-4only-63a1.patch
+1471878-63a1.patch
+1480145-63a1.patch
+1341525-63a1.patch
+1479777-63a1.patch
+1480553-1no2-63a1.patch
+1480553-3-63a1.patch
+1479950-63a1.patch
+1480116-63a1.patch
+1480077-63a1.patch
+1480020-63a1.patch
+1480018-63a1.patch
+1476417-63a1.patch
+1472211-1-63a1.patch
+1472211-2-63a1.patch
+1480012-63a1.patch
+1468524-63a1.patch
+1478982-63a1.patch
+1479718-63a1.patch
+1478503-63a1.patch
+1480588-63a1.patch
+1480991-63a1.patch
+1478885-63a1.patch
+1480361-1-63a1.patch
+1480361-2-63a1.patch
+1480323-63a1.patch
+1480650-63a1.patch
+1480668-63a1.patch
+1423577-63a1.patch
+1480306-63a1.patch
+1481138-1-63a1.patch
+1481138-2-63a1.patch
+1481138-3-63a1.patch
+1481239-63a1.patch
+1073753-63a1.patch
+1481016-63a1.patch
+1481097-1-63a1.patch
+1481097-2-63a1.patch
+1481097-3-63a1.patch
+1481005-63a1.patch
+1480720-63a1.patch
+1480966-63a1.patch
+1480493-63a1.patch
+1481484-63a1.patch
+1480575-63a1.patch
+1480963-63a1.patch
+1481032-63a1.patch
+1481248-63a1.patch
+1469395-1-63a1.patch
+1469395-2-63a1.patch
+1481505-63a1.patch
+1479900-1-63a1.patch
+1479900-2-63a1.patch
+1343981-63a1.patch
+NOBUG-20180809-utf8-63a1.patch
+1482133-1-63a1.patch
+1482133-2-63a1.patch
+1482133-3-63a1.patch
+1482135-63a1.patch
+1456404-1-63a1.patch
+1456404-2-63a1.patch
+1456404-3-63a1.patch
+1456404-4-63a1.patch
+1456404-5-63a1.patch
+1456404-6-63a1.patch
+1456404-7-63a1.patch
+1481858-63a1.patch
+1481555_63a1.patch
+1478153-63a1.patch
+1473278-63a1.patch
+1481534-63a1.patch
+1476467-63a1.patch
+1479599-63a1.patch
+1481989-1-63a1.patch
+1481989-2-63a1.patch
+1481956-63a1.patch
+1348273-63a1.patch
+1481171-1-63a1.patch
+1481171-2-63a1.patch
+1482365-63a1.patch
+1474028-1only-63a1.patch
+1482442-63a1.patch
+1482335-63a1.patch
+1482516-63a1.patch
+1481693-1-63a1.patch
+1481693-2-63a1.patch
+1481693-3-63a1.patch
+1481693-4-63a1.patch
+1481693-5-63a1.patch
+1481693-6-63a1.patch
+1481097-4-63a1.patch
+1479501-63a1.patch
+1479793-63a1.patch
+1481247-63a1.patch
+1481998-2no1-63a1.patch
+1481998-3-63a1.patch
+1481171-3-63a1.patch
+1482694-63a1.patch
+1478813-1-63a1.patch
+1482676-63a1.patch
+1478798-63a1.patch
+1482841-1-63a1.patch
+1482841-2-63a1.patch
+1482605-63a1.patch
+1476203-63a1.patch
+1341261-0-63a1.patch
+1341261-1-63a1.patch
+1341261-2-63a1.patch
+1341261-3-63a1.patch
+1341261-4-63a1.patch
+1341261-5-63a1.patch
+1341261-6-63a1.patch
+1341261-7-63a1.patch
+1341261-8-63a1.patch
+1341261-9-63a1.patch
+1481556-63a1.patch
+1378808-1-63a1.patch
+1378808-2-63a1.patch
+1378808-3-63a1.patch
+1480819-1-63a1.patch
+1480819-2-63a1.patch
+1480819-3-63a1.patch
+1480819-4-63a1.patch
+1480819-5-63a1.patch
+1480819-6-63a1.patch
+1480819-7-63a1.patch
+1480843-63a1.patch
+1479673-1-63a1.patch
+1478892-2-63a1.patch
+1478892-3-63a1.patch
+1480004-63a1.patch
+1482359-63a1.patch
+1482846-1-63a1.patch
+1482846-2-63a1.patch
+1482846-3-63a1.patch
+1482846-4-63a1.patch
+1473213-1-63a1.patch
+1473213-2-63a1.patch
+1473213-3-63a1.patch
+1473213-4-63a1.patch
+1473213-5-63a1.patch
+1478910-63a1.patch
+1469287-63a1.patch
+1481441-63a1.patch
+1482695-63a1.patch
+1482931-1-63a1.patch
+1482931-2-63a1.patch
+1483169-63a1.patch
+1469004-63a1.patch
+1483093-63a1.patch
+1482364-63a1.patch
+813836-63a1.patch
+1480524-1-63a1.patch
+1480524-2-63a1.patch
+1480524-3-63a1.patch
+1479878-63a1.patch
+1476147-63a1.patch
+1461992-1-63a1.patch
+1461992-2no3-PARTIAL-63a1.patch
+1483123-63a1.patch
+1480631-63a1.patch
+1483595-63a1.patch
+1257478-63a1.patch
+1483062-1-63a1.patch
+1483062-2-63a1.patch
+1483062-3-63a1.patch
+1483062-4-63a1.patch
+1483062-5-63a1.patch
+1483062-6-63a1.patch
+1483062-7-63a1.patch
+1483062-8-63a1.patch
+1482299-63a1.patch
+1479800-63a1.patch
+1483275-1-63a1.patch
+1483275-2-63a1.patch
+1483275-3-63a1.patch
+1472126-63a1.patch
+1482899-63a1.patch
+1483593-63a1.patch
+1477896-63a1.patch
+1483554-63a1.patch
+1483806-63a1.patch
+1477842-63a1.patch
+1483189-1-63a1.patch
+1483189-2-63a1.patch
+1483542-63a1.patch
+1346211-1-63a1.patch
+1346211-2-63a1.patch
+1346211-3-63a1.patch
+1346211-4-63a1.patch
+1346211-5-63a1.patch
+1346211-6-63a1.patch
+1483999-1-63a1.patch
+1483999-2-63a1.patch
+1483999-3-63a1.patch
+1483804-63a1.patch
+1483380-1-63a1.patch
+1483380-2-63a1.patch
+1483380-3-63a1.patch
+1293575-63a1.patch
+1482932-63a1.patch
+1483183-1-63a1.patch
+1483183-2-63a1.patch
+1484349-1-63a1.patch
+1484349-2-63a1.patch
+1484370-63a1.patch
+1469019-fix-tests-63a1.patch
+1484605-63a1.patch
+1483374-63a1.patch
+1473821-63a1.patch
+1484282-63a1.patch
+1478813-2-63a1.patch
+1484100-63a1.patch
+1484473-63a1.patch
+1459212-63a1.patch
+1465046-63a1.patch
+1483937-63a1.patch
+1040316-63a1.patch
+1484385-63a1.patch
+1484386-63a1.patch
+1484389-63a1.patch
+1033916-1-63a1.patch
+1484421-63a1.patch
+1471371-63a1.patch
+1033916-2-63a1.patch
+1456392-63a1.patch
+1437065-1-63a1.patch
+1437065-2-63a1.patch
+1437065-3-63a1.patch
+1440648-63a1.patch
+1484627-63a1.patch
+1482294-63a1.patch
+1484382-63a1.patch
+1480558-1-63a1.patch
+1480558-2-63a1.patch
+1480558-3-63a1.patch
+1480558-4-63a1.patch
+1440282-63a1.patch
+1417050-1a-63a1.patch
+1413728-63a1.patch
+1482272-63a1.patch
+1484868-63a1.patch
+1484844-63a1.patch
+1479420-63a1.patch
+1483566-63a1.patch
+1484846-63a1.patch
+1484888-63a1.patch
+1483778-63a1.patch
+1485114-63a1.patch
+1484535-63a1.patch
+1484485-63a1.patch
+1484420-63a1.patch
+1484728-1-63a1.patch
+1484728-2-63a1.patch
+1473228-63a1.patch
+1485072-63a1.patch
+1483188-63a1.patch
+1483182-1-63a1.patch
+1483182-2-63a1.patch
+1475417-1-63a1.patch
+1475417-2-63a1.patch
+1475417-3-63a1.patch
+1484943-63a1.patch
+1481897-63a1.patch
+1470921-63a1.patch
+1481740-63a1.patch
+1482560-63a1.patch
+1485499-63a1.patch
+1473230-63a1.patch
+1449540-63a1.patch
+1473272-63a1.patch
+1479813-63a1.patch
+1454285-3-63a1.patch
+1467632-1-63a1.patch
+1467632-2-63a1.patch
+1480725-1-63a1.patch
+1470490-63a1.patch
+1418971-2-63a1.patch
+1484243-63a1.patch
+1485245-63a1.patch
+1483761-1-63a1.patch
+1483761-2-63a1.patch
+1483761-3-63a1.patch
+1483761-4-63a1.patch
+1485545-63a1.patch
+1480725-2-63a1.patch
+1467116-63a1.patch
+1482178-63a1.patch
+1479673-2-63a1.patch
+1479962-63a1.patch
+1479673-01-63a1.patch
+1479673-02-63a1.patch
+1485615-1-63a1.patch
+1485615-2-63a1.patch
+1479603-01-63a1.patch
+1479603-02-63a1.patch
+1479603-03-63a1.patch
+1479603-04-63a1.patch
+1479603-05-63a1.patch
+1479603-06-63a1.patch
+1479603-07-63a1.patch
+1479603-08-63a1.patch
+1479603-09-63a1.patch
+1479603-10-63a1.patch
+1479603-11-63a1.patch
+1479603-12-63a1.patch
+1485162-1-63a1.patch
+1485162-2-63a1.patch
+1480998-63a1.patch
+1483030-63a1.patch
+1485610-63a1.patch
+1432135-63a1.patch
+1481670-1-63a1.patch
+1481670-2-63a1.patch
+1481670-3-63a1.patch
+1437065-4-63a1.patch
+1437065-5-63a1.patch
+1486027-63a1.patch
+1449985-63a1.patch
+1456973-63a1.patch
+1466427-63a1.patch
+NOBUG-20180824-buildsetting-63a1.patch
+1446923-63a1.patch
+1485949-63a1.patch
+1483953-63a1.patch
+1485396-63a1.patch
+1485174-63a1.patch
+1486173-1-63a1.patch
+1486173-2-63a1.patch
+1486173-3-63a1.patch
+1486444-63a1.patch
+1485347-1-63a1.patch
+1485347-2-63a1.patch
+1480587-63a1.patch
+1485209-63a1.patch
+1472170-63a1.patch
+1471922-63a1.patch
+1486056-63a1.patch
+1486020-63a1.patch
+1485485-1-63a1.patch
+1485485-2-63a1.patch
+1486281-63a1.patch
+1486584-63a1.patch
+1486166-63a1.patch
+1485701-63a1.patch
+1486068-63a1.patch
+1478269-1-63a1.patch
+1478269-2-63a1.patch
+1478269-3-63a1.patch
+1486654-63a1.patch
+1485759-63a1.patch
+1486729-63a1.patch
+1486957-63a1.patch
+1457092-5-63a1.patch
+1486452-63a1.patch
+1481121-1only-63a1.patch
+1487168-63a1.patch
+1480549-63a1.patch
+1486998-63a1.patch
+1486577-1-63a1.patch
+1486577-2-63a1.patch
+1486577-3-63a1.patch
+1486577-4-63a1.patch
+1486577-5-63a1.patch
+1486577-6-63a1.patch
+1486577-7-63a1.patch
+1486577-8-63a1.patch
+1328820-63a1.patch
+1486829-63a1.patch
+1480001-63a1.patch
+1486731-1-63a1.patch
+1486731-2-63a1.patch
+1486727-63a1.patch
+1486553-63a1.patch
+1479794-63a1.patch
+1461374-63a1.patch
+1486577-9-63a1.patch
+1476921-63a1.patch
+1479391-63a1.patch
+1487023-63a1.patch
+1471920-1-63a1.patch
+1482810-1-63a1.patch
+1482810-2-63a1.patch
+1486905-63a1.patch
+1442750-63a1.patch
+1487384-63a1.patch
+1485698-63a1.patch
+1486730-63a1.patch
+1486782-63a1.patch
+1487517-63a1.patch
+1480457-1-63a1.patch
+1480457-4-63a1.patch
+1480457-5-63a1.patch
+1487449-63a1.patch
+1486739-1-crashreporter-63a1.patch
+1487330-63a1.patch
+1487603-63a1.patch
+1435552-63a1.patch
+1487595-1-63a1.patch
+1487595-2-63a1.patch
+1487346-1-63a1.patch
+1487483-63a1.patch
+1487346-2-63a1.patch
+1471136-63a1.patch
+1485738-63a1.patch
+1486397-63a1.patch
+1487662-63a1.patch
+1483962-63a1.patch
+1267297-64a1.patch
+1480552-64a1.patch
+1483323-6-64a1.patch
+1484611-2ano1-64a1.patch
+1484611-2b-64a1.patch
+1417646-1-64a1.patch
+1487419-64a1.patch
+1488698-2-PARTIAL-biginttype-64a1.patch
+1489601-64a1.patch
+1488698-7-WIP-64a1.patch
+1489944-64a1.patch
+1493227-64a1.patch
+1495573-64a1.patch
+1491336-64a1.patch
+1467523-2-64a1.patch
+1482425-64a1.patch
+1420028-2-fix-64a1.patch
+1488632-64a1.patch
+1488463-64a1.patch
+1475141-64a1.patch
+1489001-64a1.patch
+1446066-64a1.patch
+1282098-64a1.patch
+1481721-64a1.patch
+1481515-64a1.patch
+1490355-64a1.patch
+1490167-64a1.patch
+1490845-64a1.patch
+1491198-64a1.patch
+1489102-1-64a1.patch
+1489102-2-64a1.patch
+1489102-3-64a1.patch
+1489102-4-64a1.patch
+1489102-5-64a1.patch
+1490413-64a1.patch
+1469027-3only-64a1.patch
+1440879-1-64a1.patch
+1440879-2-64a1.patch
+1489091-64a1.patch
+1399870-64a1.patch
+1492268-64a1.patch
+1493413-64a1.patch
+1397263-1-64a1.patch
+1397263-2-64a1.patch
+1397263-3-64a1.patch
+1397263-4-64a1.patch
+1397263-5-PARTIAL-64a1.patch
+1397263-6-64a1.patch
+1496327-1-64a1.patch
+1496327-2-64a1.patch
+1237610-1only-PARTIAL-64a1.patch
+1487122-64a1.patch
+1478370-64a1.patch
+1484829-64a1.patch
+1491159-64a1.patch
+1494150-64a1.patch
+1486055-64a1.patch
+1496591-64a1.patch
+1497440-1only-64a1.patch
+1496733-64a1.patch
+1496708-1-64a1.patch
+1496708-2-64a1.patch
+1490227-64a1.patch
+1497741-64a1.patch
+1494287-1-64a1.patch
+1494287-2-64a1.patch
+1497677-64a1.patch
+1497439-64a1.patch
+1499580-64a1.patch
+1494222-1-64a1.patch
+1494222-2-no3to5-64a1.patch
+1496610-64a1.patch
+1497350-64a1.patch
+1497359-64a1.patch
+1496136-64a1.patch
+1498031-64a1.patch
+1336712-1-64a1.patch
+1336712-2-64a1.patch
+1336712-3-64a1.patch
+1336712-4-64a1.patch
+1336712-5-64a1.patch
+1336712-6-64a1.patch
+1336712-7-64a1.patch
+1489287-64a1.patch
+1486410-64a1.patch
+1488687-64a1.patch
+1488778-64a1.patch
+1486759-64a1.patch
+1489096-64a1.patch
+1491788-64a1.patch
+1477490-64a1.patch
+1480089-64a1.patch
+1473217-1-64a1.patch
+1492770-64a1.patch
+1481338-64a1.patch
+1493672-64a1.patch
+1493922-64a1.patch
+1492508-64a1.patch
+1494384-64a1.patch
+1494326-64a1.patch
+1492037-64a1.patch
+1493641-64a1.patch
+1495641-64a1.patch
+1487321-64a1.patch
+1496084-64a1.patch
+1494951-64a1.patch
+1253844-64a1.patch
+1496379-64a1.patch
+1414287-1-64a1.patch
+1414287-2no3-64a1.patch
+1427808-3-64a1.patch
+1427808-4-64a1.patch
+1489477-1-64a1.patch
+1489477-2-64a1.patch
+1489477-3-64a1.patch
+1498980-64a1.patch
+1482153-64a1.patch
+1486554-1-64a1.patch
+1486554-3no2-64a1.patch
+1479298-64a1.patch
+1498958-64a1.patch
+1492401-64a1.patch
+1471622-4-64a1.patch
+1471622-5-64a1.patch
+1471622-6-64a1.patch
+1471622-7-64a1.patch
+1471622-8-64a1.patch
+1438830-64a1.patch
+1399877-64a1.patch
+1481097-5-64a1.patch
+1490128-64a1.patch
+1490253-1-64a1.patch
+1490253-2-64a1.patch
+1490253-3-64a1.patch
+1487049-1-64a1.patch
+1487049-2-64a1.patch
+1487049-3-64a1.patch
+1473915-64a1.patch
+1495874-64a1.patch
+1490566-64a1.patch
+1490765-64a1.patch
+1474488-2only-64a1.patch
+1490463-1-64a1.patch
+1490463-2-64a1.patch
+1490463-3-64a1.patch
+1138579-64a1.patch
+1443332-64a1.patch
+1490542-64a1.patch
+1490130-64a1.patch
+1494511-64a1.patch
+1460856-1-64a1.patch
+1460856-2-64a1.patch
+1460856-3-64a1.patch
+1460856-4-64a1.patch
+1487425-64a1.patch
+1491577-4-64a1.patch
+1487931-64a1.patch
+1488587-64a1.patch
+1489205-64a1.patch
+1393570-3only-64a1.patch
+1494300-64a1.patch
+1481612-1-64a1.patch
+1481612-2-64a1.patch
+1481612-3-64a1.patch
+1481612-4-64a1.patch
+1485638-1-64a1.patch
+1485638-2-64a1.patch
+1482435-64a1.patch
+1496080-64a1.patch
+1491615-64a1.patch
+1486866-64a1.patch
+1448417-1-64a1.patch
+1448417-2-64a1.patch
+1448417-3-64a1.patch
+1494069-1-64a1.patch
+1494069-2-64a1.patch
+1494069-3-64a1.patch
+1494069-4-64a1.patch
+1494069-5-64a1.patch
+1494069-6-64a1.patch
+1494069-7-64a1.patch
+1494069-8-64a1.patch
+1493345-64a1.patch
+1079662-1-64a1.patch
+1079662-2-64a1.patch
+1079662-3-64a1.patch
+1489443-64a1.patch
+1491132-64a1.patch
+1492365-64a1.patch
+1486086-64a1.patch
+1478685-60.patch
+1487811-1-64a1.patch
+1487811-2-64a1.patch
+1487811-3-64a1.patch
+1487811-4-64a1.patch
+1351501-1-64a1.patch
+1351501-2-64a1.patch
+1491889-1-64a1.patch
+1491889-2-64a1.patch
+1494178-1-64a1.patch
+1494178-2-64a1.patch
+1495514-64a1.patch
+1496501-64a1.patch
+1489757-60.patch
+1492915-60.patch
+1478843-60.patch
+1500484-64a1.patch
+1479853-60.patch
+1475566-60.patch
+1491848-60.patch
+979649-1-64a1.patch
+1493788-1-64a1.patch
+1493788-2-64a1.patch
+1491236-64a1.patch
+1488307-64a1.patch
+1493142-64a1.patch
+1494216-64a1.patch
+1490738-64a1.patch
+1492526-64a1.patch
+1499510-64a1.patch
+1375861-64a1.patch
+1500447-64a1.patch
+1490589-64a1.patch
+1471888-1-64a1.patch
+1483651-64a1.patch
+1480834-64a1.patch
+1490549-3-64a1.patch
+1237610-3-64a1.patch
+1499778-64a1.patch
+1489052-64a1.patch
+1498519-64a1.patch
+1500377-1-64a1.patch
+1500377-2-64a1.patch
+1493590-64a1.patch
+1499198-64a1.patch
+1494038-64a1.patch
+715884-64a1.patch
+1438975-1-64a1.patch
+1438975-2-64a1.patch
+1275926-1-64a1.patch
+1275926-2-64a1.patch
+1491489-64a1.patch
+1491419-1-64a1.patch
+1491419-2-64a1.patch
+1491419-3-64a1.patch
+1491419-4-64a1.patch
+1491419-5-64a1.patch
+1491419-6-64a1.patch
+1491419-7-64a1.patch
+1491419-8-64a1.patch
+1491419-9-64a1.patch
+1498289-64a1.patch
+1489021-64a1.patch
+1488523-2-64a1.patch
+1372826-64a1.patch
+1490725-64a1.patch
+1463048-64a1.patch
+1488181-64a1.patch
+1492341-64a1.patch
+1490240-64a1.patch
+1390547-64a1.patch
+1497692-64a1.patch
+1498274-64a1.patch
+1498765-64a1.patch
+1492599-64a1.patch
+1492601-64a1.patch
+1494398-64a1.patch
+1497586-64a1.patch
+1489550-64a1.patch
+1476062-64a1.patch
+1488217-64a1.patch
+1489454-libmar-64a1.patch
+1458129-64a1.patch
+1470266-6-64a1.patch
+1496828-64a1.patch
+1460914-5-65a1.patch
+1502886-1-65a1.patch
+1502886-2-65a1.patch
+1499844-65a1.patch
+1498072-65a1.patch
+1501712-65a1.patch
+1496619-9-65a1.patch
+1502488-65a1.patch
+1502801-65a1.patch
+1502599-65a1.patch
+1502889-65a1.patch
+1503817-65a1.patch
+1482923-65a1.patch
+1499026-1-65a1.patch
+1499026-2-65a1.patch
+1473588-PARTIAL-65a1.patch
+1502530-1-65a1.patch
+1502530-2-65a1.patch
+1502530-3-65a1.patch
+1504844-65a1.patch
+1483941-PARTIAL-65a1.patch
+1503687-65a1.patch
+1447643-65a1.patch
+1506180-2only-65a1.patch
+1505007-65a1.patch
+1506317-65a1.patch
+1502021-65a1.patch
+1507032-65a1.patch
+1506027-2-65a1.patch
+1497669-65a1.patch
+1506798-65a1.patch
+1503366-2only-65a1.patch
+1509296-65a1.patch
+1510128-65a1.patch
+1505844-65a1.patch
+1511181-PARTIAL-hyphenation-only-65a1.patch
+1505386-65a1.patch
+1497940-3-65a1.patch
+1499430-605.patch
+1507057-65a1.patch
+1500241-65a1.patch
+1485179-1-65a1.patch
+1485179-2-65a1.patch
+1508927-65a1.patch
+1511319-65a1.patch
+1508184-65a1.patch
+1499028-65a1.patch
+1492128-1only-65a1.patch
+1502159-1-65a1.patch
+1502159-2-65a1.patch
+1504727-65a1.patch
+1489698-1-65a1.patch
+1489698-2-65a1.patch
+1489698-3-65a1.patch
+1489698-4-65a1.patch
+1489698-5-65a1.patch
+1489698-6-65a1.patch
+1489698-7-65a1.patch
+1489698-8-65a1.patch
+1482395-1-65a1.patch
+1504938-65a1.patch
+1505819-65a1.patch
+1481425-1-65a1.patch
+1480550-65a1.patch
+1502457-4-65a1.patch
+1507342-65a1.patch
+1509878-65a1.patch
+1509387-65a1.patch
+1511079-65a1.patch
+1501507-65a1.patch
+1408675-1-65a1.patch
+1408675-2-65a1.patch
+1408675-3-65a1.patch
+1408675-4-65a1.patch
+1508506-65a1.patch
+1507389-65a1.patch
+979649-3-65a1.patch
+979649-4-65a1.patch
+1503589-65a1.patch
+1492663-65a1.patch
+1509391-65a1.patch
+1503599-65a1.patch
+1483548-65a1.patch
+1499933-65a1.patch
+1502810-65a1.patch
+1504334-65a1.patch
+1507047-65a1.patch
+1497638-65a1.patch
+1505205-PARTIAL-65a1.patch
+1508635-65a1.patch
+1509276-65a1.patch
+1510637-65a1.patch
+1510919-65a1.patch
+1511258-65a1.patch
+1511285-1-65a1.patch
+1511285-2-65a1.patch
+1510458-1-65a1.patch
+1510458-2-65a1.patch
+1510458-3-65a1.patch
+1509872-65a1.patch
+1467406-65a1.patch
+1501381-65a1.patch
+1501605-65a1.patch
+1502165-65a1.patch
+1503240-65a1.patch
+1504932-65a1.patch
+1471535-2-65a1.patch
+1425277-2-65a1.patch
+1425277-3-65a1.patch
+1509875-1-65a1.patch
+1509875-2-65a1.patch
+1509875-3-65a1.patch
+1504452-65a1.patch
+1305743-65a1.patch
+1494752-604.patch
+1501218-65a1.patch
+1500154-65a1.patch
+1503537-65a1.patch
+1510247-65a1.patch
+1510183-65a1.patch
+1501224-1-65a1.patch
+1501224-2-65a1.patch
+1502534-65a1.patch
+1498942-1-65a1.patch
+1498942-2-65a1.patch
+1496503-1-65a1.patch
+1496503-2-65a1.patch
+1496503-3-65a1.patch
+1496503-4-65a1.patch
+1511181-crashreporter-65a1.patch
+1352355-1-65a1.patch
+1352355-4-65a1.patch
+1506138-65a1.patch
+1501227-1-65a1.patch
+1501227-2-65a1.patch
+1501227-3-65a1.patch
+1502190-3-65a1.patch
+1504117-3-65a1.patch
+1493192-65a1.patch
+1497937-65a1.patch
+1468539-65a1.patch
+1468544-65a1.patch
+1468542-65a1.patch
+1468556-65a1.patch
+1468552-65a1.patch
+1511181-bspatch-65a1.patch
+1504147-66a1.patch
+1512673-66a1.patch
+1514121-66a1.patch
+1489094-66a1.patch
+1514124-66a1.patch
+1514884-1-66a1.patch
+1514884-2-66a1.patch
+1515170-66a1.patch
+1515843-1-66a1.patch
+1515843-2-66a1.patch
+1515843-3-66a1.patch
+1504656-66a1.patch
+1513934-66a1.patch
+1513900-PARTIAL-stdcppcompat-60.patch
+1513009-2-66a1.patch
+1514104-66a1.patch
+1514089-66a1.patch
+1514448-66a1.patch
+1513798-01-66a1.patch
+1513798-02-66a1.patch
+1513798-04no03-66a1.patch
+1513798-05-66a1.patch
+1513798-06-66a1.patch
+1513798-07-66a1.patch
+1513798-08-66a1.patch
+1513798-09-66a1.patch
+1513798-10-66a1.patch
+1513798-11-66a1.patch
+1513798-12-66a1.patch
+1513798-13-66a1.patch
+1515581-66a1.patch
+1515577-66a1.patch
+1515808-66a1.patch
+1515629-66a1.patch
+1517237-66a1.patch
+1517222-66a1.patch
+1514625-66a1.patch
+1519740-66a1.patch
+1520410-66a1.patch
+1487490-66a1.patch
+1477487-1only-66a1.patch
+1516513-1-66a1.patch
+1516513-2-66a1.patch
+1517055-1-66a1.patch
+1517055-2-66a1.patch
+1519040-66a1.patch
+1519042-1-66a1.patch
+1519042-2-66a1.patch
+1519042-3-66a1.patch
+1445942-66a1.patch
+1510574-66a1.patch
+1460620-66a1.patch
+1519325-66a1.patch
+1519307-66a1.patch
+1521438-66a1.patch
+1485216-1-66a1.patch
+1485216-2-66a1.patch
+1515268-66a1.patch
+1519660-66a1.patch
+NOBUG-20190118-zlib-66a1.patch
+1520647-66a1.patch
+1460619-66a1.patch
+1513615-1-66a1.patch
+1513615-2-66a1.patch
+1513615-3-66a1.patch
+1430149-4-66a1.patch
+1515257-1-66a1.patch
+1515257-2-66a1.patch
+1515257-3-66a1.patch
+1515257-4-66a1.patch
+1515257-5-66a1.patch
+1515257-6-66a1.patch
+1515257-7-66a1.patch
+1515257-8-66a1.patch
+1515852-66a1.patch
+1516128-66a1.patch
+1492149-66a1.patch
+1522016-66a1.patch
+1515579-2only-66a1.patch
+1515528-2-66a1.patch
+1515528-3-66a1.patch
+1515528-4-66a1.patch
+1515528-5-66a1.patch
+1520108-66a1.patch
+1519603-1-66a1.patch
+1519603-2-66a1.patch
+1519603-3-66a1.patch
+1519603-4-66a1.patch
+1519603-5-66a1.patch
+1519603-6-66a1.patch
+1519603-7-66a1.patch
+1432133-66a1.patch
+1520340-1-66a1.patch
+1520340-2-66a1.patch
+1520340-3-66a1.patch
+1520340-4-66a1.patch
+1520340-5-66a1.patch
+1520340-6-66a1.patch
+1520369-1-66a1.patch
+1520369-2-66a1.patch
+1520369-3-66a1.patch
+1520377-1-66a1.patch
+1520377-2-66a1.patch
+1520377-3-66a1.patch
+1520394-1-66a1.patch
+1520394-2-66a1.patch
+1520394-3-66a1.patch
+1520394-4-66a1.patch
+1520394-5-66a1.patch
+1521284-66a1.patch
+1513134-1no2-66a1.patch
+1513134-3-66a1.patch
+1513134-4-66a1.patch
+1520718-66a1.patch
+1515604-66a1.patch
+1500504-66a1.patch
+1515595-1-66a1.patch
+1515595-2-66a1.patch
+1516374-66a1.patch
+1517419-66a1.patch
+1518726-66a1.patch
+1520681-66a1.patch
+1518630-66a1.patch
+1514209-66a1.patch
+1519281-66a1.patch
+1520516-66a1.patch
+1521478-66a1.patch
+1522507-66a1.patch
+1521691-1-66a1.patch
+1521691-2-66a1.patch
+1519629-66a1.patch
+1252556-66a1.patch
+1519319-1-66a1.patch
+1520683-66a1.patch
+1515261-66a1.patch
+1513073-66a1.patch
+1520308-66a1.patch
+1512462-66a1.patch
+1443429-1-66a1.patch
+1443429-2-66a1.patch
+1443429-3-66a1.patch
+1443429-4-66a1.patch
+1515021-66a1.patch
+1519030-66a1.patch
+1519047-66a1.patch
+1519308-66a1.patch
+1519744-66a1.patch
+1520393-66a1.patch
+1257904-66a1.patch
+1513677-66a1.patch
+1516829-66a1.patch
+1519729-2-66a1.patch
+1519729-3-66a1.patch
+1519319-2-66a1.patch
+1521791-66a1.patch
+1518106-1-66a1.patch
+1518106-2-66a1.patch
+1506524-66a1.patch
+1522150-1-66a1.patch
+1521584-66a1.patch
+1518586-1-66a1.patch
+1518586-2-66a1.patch
+1520006-66a1.patch
+1521460-2-crashreporter-66a1.patch
+1514435-66a1.patch
+1504017-webp-66a1.patch
+1517730-66a1.patch
+1518922-1-66a1.patch
+1518922-2-66a1.patch
+1521000-2-crashreporter-66a1.patch
+1518115-66a1.patch
+1517298-66a1.patch
+1514285-1-66a1.patch
+1514285-2-66a1.patch
+1508782-66a1.patch
+1514532-1-66a1.patch
+1514532-2-66a1.patch
+1529000-67a1.patch
+1523223-67a1.patch
+1522788-67a1.patch
+1522354-1-67a1.patch
+1522354-2-67a1.patch
+1523341-PARTIAL-67a1.patch
+1524194-1-67a1.patch
+1518947-67a1.patch
+1525416-67a1.patch
+1528194-2-67a1.patch
+1523874-67a1.patch
+1522066-67a1.patch
+1529139-1-67a1.patch
+1529139-2-67a1.patch
+1506291-1only-67a1.patch
+1531912-67a1.patch
+1514202-2only-SIMPLIFIED-67a1.patch
+1515356-67a1.patch
+1511224-1a-nasm-67a1.patch
+1428713-67a1.patch
+1481097-6-67a1.patch
+1523153-1-67a1.patch
+1523153-3-67a1.patch
+1528194-1-67a1.patch
+1522354-3-67a1.patch
+1523204-1-67a1.patch
+1526062-1-67a1.patch
+1526062-2-67a1.patch
+1526062-3-67a1.patch
+1471920-2-67a1.patch
+1528241-67a1.patch
+1483228-1-67a1.patch
+1483228-2-67a1.patch
+1486994-67a1.patch
+1525069-2no1-67a1.patch
+1525069-3-67a1.patch
+1518175-67a1.patch
+1525688-67a1.patch
+1531680-67a1.patch
+1523198-1-67a1.patch
+1523198-2-67a1.patch
+1523198-3-67a1.patch
+1523204-2-67a1.patch
+1519010-67a1.patch
+1520232-67a1.patch
+1523851-1-67a1.patch
+1523851-2-67a1.patch
+1523851-3-67a1.patch
+1523851-5-67a1.patch
+1527471-1-67a1.patch
+1527471-2-67a1.patch
+1523153-2-67a1.patch
+1523593-67a1.patch
+1515004-PARTIAL-67a1.patch
+1526509-67a1.patch
+1520920-67a1.patch
+1527016-67a1.patch
+1525100-67a1.patch
+1528892-67a1.patch
+1485117-67a1.patch
+1513951-4only-67a1.patch
+1523835-67a1.patch
+1521186-67a1.patch
+NOBUG-removenonascii67a1-25314.patch
+1526062-4-67a1.patch
+1526062-5-67a1.patch
+1524435-67a1.patch
+1529894-1-67a1.patch
+1529894-2-67a1.patch
+1533043-1only-67a1.patch
+1515746-1-67a1.patch
+1515746-2-67a1.patch
+1515746-3-67a1.patch
+1367092-1-67a1.patch
+1367092-2-67a1.patch
+1367092-3-67a1.patch
+1367092-4-67a1.patch
+1367092-5-67a1.patch
+1530016-67a1.patch
+1525474-67a1.patch
+1524444-67a1.patch
+1530352-67a1.patch
+1530908-3-67a1.patch
+1529799-1-67a1.patch
+1529799-2-67a1.patch
+1524461-67a1.patch
+1530587-67a1.patch
+1513605-67a1.patch
+1349064-1-67a1.patch
+1349064-2-67a1.patch
+1349064-3-67a1.patch
+1518572-1-67a1.patch
+1522614-1-67a1.patch
+1522614-2-67a1.patch
+1522614-3-67a1.patch
+1522614-4-67a1.patch
+1522614-5-67a1.patch
+1522614-6-67a1.patch
+1522614-8-67a1.patch
+1522609-1-67a1.patch
+1522609-2-67a1.patch
+1529691-67a1.patch
+1534630-67a1.patch
+1506665-67a1.patch
+1496118-67a1.patch
+1521304-67a1.patch
+1528028-67a1.patch
+1504339-67a1.patch
+1533133-1only-67a1.patch
+1518283-crashreporter-67a1.patch
+1247453-1-67a1.patch
+1247453-2-67a1.patch
+1522078-67a1.patch
+NOBUG-20190207-crashreporter-67a1.patch
+1428706-1-67a1.patch
+1428706-2-67a1.patch
+1472589-67a1.patch
+1523969-12-crashreporter-67a1.patch
+1529363-1-67a1.patch
+1529363-2-67a1.patch
+1529363-3-67a1.patch
+1021926-67a1.patch
+1527858-67a1.patch
+1528304-67a1.patch
+1535050-67a1.patch
+1535026-67a1.patch
+1535649-67a1.patch
+1471648-67a1.patch
+1526973-67a1.patch
+1428714-67a1.patch
+1528652-67a1.patch
+1532553-67a1.patch
+1535242-68a1.patch
+1530544-68a1.patch
+1535243-68a1.patch
+1524429-1-68a1.patch
+1524429-2-68a1.patch
+1536887-68a1.patch
+1536783-68a1.patch
+1380031-68a1.patch
+1480480-68a1.patch
+1539574-68a1.patch
+1377304-68a1.patch
+1434848-68a1.patch
+1540540-68a1.patch
+524410-1-68a1.patch
+524410-2-68a1.patch
+524410-3-68a1.patch
+524410-4-68a1.patch
+524410-5-68a1.patch
+1541068-68a1.patch
+1538810-1-68a1.patch
+1538810-2-68a1.patch
+1405345-68a1.patch
+1539694-1-68a1.patch
+1539694-2-68a1.patch
+1539694-3-68a1.patch
+1544431-68a1.patch
+1544981-68a1.patch
+1545521-68a1.patch
+1545583-68a1.patch
+1544980-68a1.patch
+1543948-68a1.patch
+1546491-68a1.patch
+1547143-PARTIAL-hyphenation-only-68a1.patch
+1457669-68a1.patch
+1549833-68a1.patch
+1550532-68a1.patch
+1540733-68a1.patch
+1549886-1only-PARTIAL-68a1.patch
+1505471-68a1.patch
+1552336-68a1.patch
+1633880-1-68.patch
+1633880-2-68.patch
+1521734-1-68a1.patch
+1521734-2-68a1.patch
+1521734-3-68a1.patch
+1542826-6only-68a1.patch
+1550868-68a1.patch
+1530659-68a1.patch
+1520948-1-68a1.patch
+1520948-2-68a1.patch
+1539648-68a1.patch
+1546558-68a1.patch
+1549646-68a1.patch
+1544881-68a1.patch
+1536672-PARTIAL-68a1.patch
+1525968-3only-PARTIAL-68a1.patch
+1540079-68a1.patch
+1541329-68a1.patch
+1542673-68a1.patch
+1545567-68a1.patch
+1535948-68a1.patch
+1504308-68a1.patch
+1540089-1-68a1.patch
+1540089-2-68a1.patch
+1526072-PARTIAL-68a1.patch
+1537574-68a1.patch
+1543663-1no2-68a1.patch
+1543663-3-68a1.patch
+1549206-1-68a1.patch
+1549206-2-68a1.patch
+1537644-68a1.patch
+1540136-1-68a1.patch
+1540136-2-68a1.patch
+1540136-3-68a1.patch
+1540136-4-68a1.patch
+1540136-5-68a1.patch
+1536836-68a1.patch
+1552430-68a1.patch
+1533481-1-68a1.patch
+1533481-2-68a1.patch
+1533481-3-68a1.patch
+1533481-4-68a1.patch
+1533481-5-68a1.patch
+1533481-6-68a1.patch
+1533481-7no8-68a1.patch
+1533481-9no10-68a1.patch
+1543644-68a1.patch
+1532630-68a1.patch
+1541818-68a1.patch
+1522931-1only-68a1.patch
+1495672-68a1.patch
+1547847-68a1.patch
+1549554-68a1.patch
+1549794-68a1.patch
+1353680-1-68a1.patch
+1353680-2-68a1.patch
+1521996-1-PARTIAL-68a1.patch
+1543642-1-68a1.patch
+1543642-2-68a1.patch
+1543642-3-68a1.patch
+1543642-4-68a1.patch
+1543642-5-68a1.patch
+1543642-6-68a1.patch
+1535355-1-68a1.patch
+1535355-2-68a1.patch
+1536763-68a1.patch
+1537576-68a1.patch
+1542878-68a1.patch
+1542097-68a1.patch
+1536410-68a1.patch
+1534341-68a1.patch
+1538382-68a1.patch
+1540653-68a1.patch
+1536230-68a1.patch
+1195299-2only-68a1.patch
+1547038-68a1.patch
+1540145-68a1.patch
+1526243-68a1.patch
+1542691-68a1.patch
+1547931-68a1.patch
+1535226-68a1.patch
+1541269-68a1.patch
+1519636-13-crashreporter-68a1.patch
+1433685-68a1.patch
+1546697-1-68a1.patch
+1547143-2-crashreporter-68a1.patch
+1547698-1-68a1.patch
+1547698-2-68a1.patch
+1547698-3-68a1.patch
+1547698-4-68a1.patch
+1541285-68a1.patch
+1546501-crashreporter-68a1.patch
+1540142-68a1.patch
+1551084-1-69a1.patch
+1551084-2-69a1.patch
+1551084-3-69a1.patch
+1551084-4-69a1.patch
+1551084-5-69a1.patch
+1552627-2only-69a1.patch
+1552672-69a1.patch
+1480236-PARTIAL-notests-69a1.patch
+1543829-69a1.patch
+1519636-PARTIAL-hyphenation-only-69a1.patch
+1556257-69a1.patch
+1555329-69a1.patch
+1553864-69a1.patch
+1554306-69a1.patch
+1556662-69a1.patch
+1552658-69a1.patch
+1551639-1-69a1.patch
+1551639-2-69a1.patch
+1551639-3-69a1.patch
+1501277-69a1.patch
+1549386-69a1.patch
+1557229-69a1.patch
+1557291-69a1.patch
+1552121-69a1.patch
+1551844-69a1.patch
+1558883-69a1.patch
+1558737-69a1.patch
+1524194-2-69a1.patch
+1410013-69a1.patch
+1559900-69a1.patch
+1560439-69a1.patch
+1556103-1only-69a1.patch
+1551690-69a1.patch
+1547730-01-69a1.patch
+1547730-02-69a1.patch
+1547730-03-69a1.patch
+1547730-04-69a1.patch
+1547730-06-69a1.patch
+1547730-07-69a1.patch
+1547730-08-69a1.patch
+1547730-09-69a1.patch
+1547730-10-69a1.patch
+1547730-11-69a1.patch
+1547730-12-69a1.patch
+1547730-13-69a1.patch
+1547730-14-69a1.patch
+1547730-15-69a1.patch
+1547730-16-69a1.patch
+1547730-17-69a1.patch
+1547730-18-69a1.patch
+1547730-19-69a1.patch
+1547730-20-69a1.patch
+1547730-21-69a1.patch
+1547730-22-69a1.patch
+1547730-23-69a1.patch
+1547730-24-69a1.patch
+1547730-25-69a1.patch
+1547730-26-69a1.patch
+1547730-27-69a1.patch
+1547730-28-69a1.patch
+1473498-01-69a1.patch
+1473498-02-69a1.patch
+1473498-03-69a1.patch
+1473498-04-69a1.patch
+1473498-05-69a1.patch
+1547193-69a1.patch
+1507696-69a1.patch
+1550956-69a1.patch
+1554186-69a1.patch
+1557583-1-69a1.patch
+1557583-2-69a1.patch
+1560527-69a1.patch
+1561465-1-69a1.patch
+1561465-2-69a1.patch
+1561822-69a1.patch
+1556880-69a1.patch
+1551078-69a1.patch
+1554115-69a1.patch
+1561069-69a1.patch
+1561088-69a1.patch
+1559975-01-69a1.patch
+1559975-02-69a1.patch
+1559975-03-69a1.patch
+1559975-04-69a1.patch
+1520001-1only-69a1.patch
+1552687-69a1.patch
+1542746-1-PARTIAL-69a1.patch
+1542746-3no2-69a1.patch
+1542963-1-69a1.patch
+1542963-2-69a1.patch
+1542963-3-69a1.patch
+1542963-4-69a1.patch
+1542963-5-69a1.patch
+1542963-6-69a1.patch
+1542963-7-69a1.patch
+1557336-69a1.patch
+1551368-1-69a1.patch
+1551368-2-69a1.patch
+1551368-3-69a1.patch
+1559975-08-69a1.patch
+1557278-69a1.patch
+1464007-69a1.patch
+1559740-1-69a1.patch
+1559740-2-69a1.patch
+1555824-69a1.patch
+1554056-69a1.patch
+1554928-69a1.patch
+1560044-1-69a1.patch
+1560044-2-69a1.patch
+1560044-3-69a1.patch
+1557213-1only-69a1.patch
+1557528-69a1.patch
+1618065-69a1.patch
+1548563-69a1.patch
+1562083-69a1.patch
+1553226-69a1.patch
+1555427-69a1.patch
+1555917-69a1.patch
+1556073-69a1.patch
+1561494-69a1.patch
+1556891-1-69a1.patch
+1556891-2-69a1.patch
+1558554-69a1.patch
+1555954-69a1.patch
+1543725-69a1.patch
+1561435-62-69a1.patch
+1558372-70a1.patch
+1561749-70a1.patch
+1564117-1-70a1.patch
+1564117-2-70a1.patch
+1563937-70a1.patch
+1564643-70a1.patch
+1510351-70a1.patch
+1526744-70a1.patch
+1539451-PARTIAL-webide-70a1.patch
+1563133-70a1.patch
+1565130-70a1.patch
+1569223-2-70a1.patch
+1570334-70a1.patch
+1539780-70a1.patch
+1574058-70a1.patch
+1575420-70a1.patch
+1564897-70a1.patch
+1560700-1-70a1.patch
+1560700-2-70a1.patch
+1574056-70a1.patch
+1570697-70a1.patch
+1572986-70a1.patch
+1574402-70a1.patch
+1404367-70a1.patch
+1402379-1only-70a1.patch
+1562686-2only-70a1.patch
+1577685-70a1.patch
+1559195-PARTIAL-70a1.patch
+1577867-70a1.patch
+1577869-70a1.patch
+1564216-1-70a1.patch
+1562462-2-70a1.patch
+1473498-06-70a1.patch
+1473498-07-70a1.patch
+1473498-08-70a1.patch
+1473498-09no10-70a1.patch
+1473498-11-70a1.patch
+1473498-12-70a1.patch
+1575135-2-70a1.patch
+1563085-70a1.patch
+1566032-70a1.patch
+1559975-10-70a1.patch
+1559975-11-70a1.patch
+1559975-12-70a1.patch
+1559975-13-70a1.patch
+1559975-14-70a1.patch
+1559975-15-70a1.patch
+1559975-16-70a1.patch
+1559975-17-70a1.patch
+1559975-18-70a1.patch
+1559975-19-70a1.patch
+1559975-20-70a1.patch
+1559975-21-70a1.patch
+1559975-22-70a1.patch
+1559975-23-70a1.patch
+1559975-24-70a1.patch
+1559975-25-70a1.patch
+1559975-26-70a1.patch
+1559975-28-70a1.patch
+1559975-29-70a1.patch
+1559975-30-70a1.patch
+1559975-31-70a1.patch
+1559975-32-70a1.patch
+1559975-33-70a1.patch
+1559975-35-70a1.patch
+1559975-36-70a1.patch
+1559975-37-70a1.patch
+1562462-1-70a1.patch
+1563797-1-70a1.patch
+1563797-2-70a1.patch
+1563797-3-70a1.patch
+1563797-4-70a1.patch
+1568713-70a1.patch
+1569075-70a1.patch
+1575135-1-70a1.patch
+1575135-3-70a1.patch
+1575135-4-70a1.patch
+1575135-5-70a1.patch
+1575135-6-70a1.patch
+1575135-7-70a1.patch
+1575135-8-70a1.patch
+844509-1-70a1.patch
+844509-2-70a1.patch
+844509-3-70a1.patch
+844509-4-70a1.patch
+1575375-01-70a1.patch
+1575375-03-70a1.patch
+1575375-04-70a1.patch
+1575375-05-70a1.patch
+1575375-06-70a1.patch
+1575375-07-70a1.patch
+1575375-08no09-70a1.patch
+1575375-10-70a1.patch
+1575804-1-70a1.patch
+1575804-2-70a1.patch
+1473498-13-70a1.patch
+1473498-14-70a1.patch
+1473498-15-70a1.patch
+1473498-16-70a1.patch
+1473498-17-70a1.patch
+1210157-1-70a1.patch
+1210157-2-70a1.patch
+1210157-3-70a1.patch
+1210157-4-70a1.patch
+1210157-5-70a1.patch
+1210157-6-70a1.patch
+1210157-7-70a1.patch
+1577603-70a1.patch
+1561695-70a1.patch
+1566180-70a1.patch
+1571934-1-70a1.patch
+1571934-2-70a1.patch
+1573406-70a1.patch
+1570597-70a1.patch
+1564434-70a1.patch
+1573722-70a1.patch
+1357317-70a1.patch
+1560574-70a1.patch
+1555762-70a1.patch
+1512487-1-70a1.patch
+1512487-2-70a1.patch
+1568484-70a1.patch
+1485793-70a1.patch
+1562645-1-70a1.patch
+1562645-2-70a1.patch
+1570772-1-70a1.patch
+1570772-2-70a1.patch
+1570772-3-70a1.patch
+1570772-4-70a1.patch
+1570772-5no67-70a1.patch
+1573080-1-70a1.patch
+1573080-2-70a1.patch
+1576097-1-70a1.patch
+1561323-70a1.patch
+1513705-70a1.patch
+1575436-70a1.patch
+1321281-1-70a1.patch
+1321281-2-70a1.patch
+1564330-70a1.patch
+1565717-1-70a1.patch
+1565717-2-70a1.patch
+1565717-3-70a1.patch
+1565717-4-70a1.patch
+1565717-5-70a1.patch
+1568515-70a1.patch
+1564449-70a1.patch
+1566960-70a1.patch
+1567888-70a1.patch
+1435498-70a1.patch
+1572046-70a1.patch
+1572394-70a1.patch
+1573314-70a1.patch
+1573861-70a1.patch
+1573566-6-70a1.patch
+1565725-70a1.patch
+1574761-70a1.patch
+1568634-70a1.patch
+1576941-70a1.patch
+1577326-70a1.patch
+1565314-70a1.patch
+1566855-70a1.patch
+1578531-71a1.patch
+1577411-71a1.patch
+1579546-71a1.patch
+1579545-71a1.patch
+1577799-71a1.patch
+1581921-71a1.patch
+1582078-71a1.patch
+1567642-8-71a1.patch
+1581248-71a1.patch
+1539462-1only-webide-71a1.patch
+1583177-71a1.patch
+1585305-71a1.patch
+1576859-71a1.patch
+1550108-1only-71a1.patch
+1580356-3only-PARTIAL-71a1.patch
+1587187-71a1.patch
+1201401-682.patch
+1584907-71a1.patch
+1577871-71a1.patch
+1577908-71a1.patch
+1559975-38-71a1.patch
+1559975-39-71a1.patch
+1559975-40-71a1.patch
+1559975-41-71a1.patch
+1578198-71a1.patch
+1577517-71a1.patch
+1577826-1-71a1.patch
+1577826-2-71a1.patch
+1567642-1-71a1.patch
+1567642-2-71a1.patch
+1567642-3-71a1.patch
+1567642-4-71a1.patch
+1579455-1-71a1.patch
+1579455-2-71a1.patch
+1579455-3-71a1.patch
+1583958-71a1.patch
+1580533-71a1.patch
+1494090-71a1.patch
+1562996-71a1.patch
+1433941-71a1.patch
+1549176-1-71a1.patch
+1586358-71a1.patch
+1584452-71a1.patch
+1586592-71a1.patch
+1587206-1-71a1.patch
+1583582-71a1.patch
+1587913-71a1.patch
+1587715-PARTIAL-71a1.patch
+1580280-3-71a1.patch
+1580280-9-71a1.patch
+1398167-71a1.patch
+1570772-8-71a1.patch
+1577501-71a1.patch
+1580492-71a1.patch
+1580280-1-71a1.patch
+1580280-2-71a1.patch
+1580280-4-71a1.patch
+1580280-6-71a1.patch
+1554657-71a1.patch
+1580280-7-71a1.patch
+1577726-1-71a1.patch
+1577726-2-71a1.patch
+1577726-3-71a1.patch
+1577726-4-71a1.patch
+1585686-71a1.patch
+1585565-1-71a1.patch
+1585565-2-71a1.patch
+1585702-1-71a1.patch
+1585702-2-71a1.patch
+1585702-3-71a1.patch
+1584567-1-71a1.patch
+1585828-71a1.patch
+1578348-71a1.patch
+1581015-71a1.patch
+1586010-71a1.patch
+1579775-1-71a1.patch
+1579775-2-71a1.patch
+1578776-71a1.patch
+1578478-71a1.patch
+1579523-71a1.patch
+1580931-71a1.patch
+1582743-71a1.patch
+1579479-71a1.patch
+1586165-71a1.patch
+1579758-71a1.patch
+1496746-71a1.patch
+1580317-71a1.patch
+1583360-71a1.patch
+1575216-71a1.patch
+1585146-1-71a1.patch
+1585146-2-71a1.patch
+1585672-71a1.patch
+1578145-71a1.patch
+1588947-72a1.patch
+1426865-2-72a1.patch
+1426865-4-72a1.patch
+1584296-72a1.patch
+1569728-1only-72a1.patch
+1593966-72a1.patch
+1587116-72a1.patch
+1590907-2-72a1.patch
+1579189-72a1.patch
+1371390-72a1.patch
+1577336-3only-PARTIAL-72a1.patch
+1536848-72a1.patch
+1595674-72a1.patch
+1598164-3only-72a1.patch
+1566141-1-72a1.patch
+1566141-2-72a1.patch
+1566141-3-72a1.patch
+1566141-4-PARTIAL-72a1.patch
+1566141-5-72a1.patch
+1566141-6-72a1.patch
+1566141-7-72a1.patch
+1566141-8-72a1.patch
+1593415-1-72a1.patch
+1593415-2-72a1.patch
+1599163-72a1.patch
+1578576-1-72a1.patch
+1578576-2no34-72a1.patch
+1562642-16-72a1.patch
+1562642-21-72a1.patch
+1562642-25-72a1.patch
+1578910-72a1.patch
+1598202-72a1.patch
+1590344-72a1.patch
+1591220-72a1.patch
+1212502-1-72a1.patch
+1212502-2-72a1.patch
+1212502-3-72a1.patch
+1590907-5-72a1.patch
+1595995-72a1.patch
+1598417-72a1.patch
+1508320-72a1.patch
+1595836-72a1.patch
+1596431-72a1.patch
+1598830-72a1.patch
+1587232-72a1.patch
+1598273-72a1.patch
+1593105-72a1.patch
+1581224-72a1.patch
+1593486-1-72a1.patch
+1593486-2-72a1.patch
+1593486-3-72a1.patch
+1592855-1-72a1.patch
+1592855-2-72a1.patch
+1592855-3-72a1.patch
+1592855-4-72a1.patch
+1597686-72a1.patch
+1598839-72a1.patch
+1598099-72a1.patch
+1589792-72a1.patch
+1588123-72a1.patch
+1599648-72a1.patch
+1599744-72a1.patch
+1428718-1-72a1.patch
+1595220-72a1.patch
+1448349-72a1.patch
+1485057-72a1.patch
+1596807-72a1.patch
+1516367-72a1.patch
+838896-72a1.patch
+1598382-72a1.patch
+1420363-72a1.patch
+1583353-9-72a1.patch
+1596911-1-72a1.patch
+1599235-73a1.patch
+1592302-1-73a1.patch
+1592302-2-73a1.patch
+1592302-3-73a1.patch
+1594903-73a1.patch
+1595218-3only-73a1.patch
+1585404-73a1.patch
+1600782-73a1.patch
+1592307-01-73a1.patch
+1592307-02-73a1.patch
+1592307-03-73a1.patch
+1592307-04-73a1.patch
+1592307-05-73a1.patch
+1592307-06-73a1.patch
+1592307-07-73a1.patch
+1592307-08-73a1.patch
+1592307-09-73a1.patch
+1592307-10-73a1.patch
+1592307-11-73a1.patch
+1592307-12-73a1.patch
+1592307-13-73a1.patch
+1592307-14-73a1.patch
+1592307-15-73a1.patch
+1592307-16a-73a1.patch
+1592307-16b-73a1.patch
+1592307-17-73a1.patch
+1592307-18-73a1.patch
+1600664-73a1.patch
+1600911-73a1.patch
+1603561-73a1.patch
+1601703-73a1.patch
+1559975-42-73a1.patch
+1559975-43-73a1.patch
+1602525-73a1.patch
+1603181-73a1.patch
+1603262-73a1.patch
+1602540-73a1.patch
+1604277-73a1.patch
+1604337-73a1.patch
+1581016-73a1.patch
+1590745-73a1.patch
+1464038-73a1.patch
+1600695-73a1.patch
+1601578-73a1.patch
+1606008-73a1.patch
+1606160-73a1.patch
+1606336-73a1.patch
+1606340-73a1.patch
+1606462-73a1.patch
+1605264-73a1.patch
+1606490-73a1.patch
+1606504-73a1.patch
+1606692-73a1.patch
+726479-73a1.patch
+1581684-1-73a1.patch
+1581684-2-73a1.patch
+1581684-3-73a1.patch
+1604360-1-73a1.patch
+1604360-2-73a1.patch
+1604360-3-73a1.patch
+1604360-4-73a1.patch
+1604360-5-73a1.patch
+1604360-6-73a1.patch
+1604360-7-73a1.patch
+1604360-8-73a1.patch
+1604360-9-73a1.patch
+1604814-73a1.patch
+1604307-73a1.patch
+1604557-73a1.patch
+1604881-73a1.patch
+1603645-73a1.patch
+1605144-73a1.patch
+1605145-73a1.patch
+1516279-73a1.patch
+1280561-73a1.patch
+1596660-PARTIAL-removeonly-73a1.patch
+1606728-74a1.patch
+1606124-74a1.patch
+1607919-1-74a1.patch
+1607919-2-74a1.patch
+1607919-3-74a1.patch
+1563797-5-74a1.patch
+1607284-74a1.patch
+1607345-74a1.patch
+1607503-74a1.patch
+1607512-74a1.patch
+1563797-6-74a1.patch
+1607470-74a1.patch
+1608091-74a1.patch
+1608880-74a1.patch
+1609281-74a1.patch
+1610774-74a1.patch
+1609483-74a1.patch
+1610778-74a1.patch
+1608235-74a1.patch
+1607193-1-74a1.patch
+1611088-74a1.patch
+1608535-1-74a1.patch
+1608535-2-74a1.patch
+1607204-74a1.patch
+1610944-74a1.patch
+1611340-74a1.patch
+1612025-74a1.patch
+1611002-74a1.patch
+1611465-74a1.patch
+1601684-74a1.patch
+1604667-74a1.patch
+1569059-74a1.patch
+1612579-74a1.patch
+1608570-PARTIAL-74a1.patch
+1572355-74a1.patch
+1605328-74a1.patch
+1596737-74a1.patch
+1609649-74a1.patch
+1486331-75a1.patch
+1602773-1-75a1.patch
+1609595-75a1.patch
+1613823-1-75a1.patch
+1614771-75a1.patch
+1614994-1-75a1.patch
+1614994-2-75a1.patch
+1608256-75a1.patch
+1616426-75a1.patch
+1606970-75a1.patch
+1615423-75a1.patch
+1614518-1-75a1.patch
+1614518-2-75a1.patch
+1614518-3-75a1.patch
+1614518-4-75a1.patch
+1614518-5-75a1.patch
+1614518-6-75a1.patch
+1614518-7-75a1.patch
+1614518-8-75a1.patch
+1617095-75a1.patch
+1617652-gyp-75a1.patch
+1617639-75a1.patch
+1614136-75a1.patch
+1618288-1-75a1.patch
+1618288-2-75a1.patch
+1616885-75a1.patch
+1616920-75a1.patch
+1616989-75a1.patch
+1617014-75a1.patch
+1617303-75a1.patch
+1617313-75a1.patch
+1618775-75a1.patch
+1609116-75a1.patch
+1611006-75a1.patch
+1618620-3-75a1.patch
+1618620-4-75a1.patch
+1618620-5-75a1.patch
+1618620-6-75a1.patch
+1618620-9-75a1.patch
+1612077-75a1.patch
+1619408-75a1.patch
+1619280-75a1.patch
+1620035-2-75a1.patch
+1620035-3-75a1.patch
+1620035-5-75a1.patch
+1620035-8-75a1.patch
+1617147-75a1.patch
+1620158-75a1.patch
+1620513-75a1.patch
+1619475-1-75a1.patch
+1619475-2-75a1.patch
+1613263-75a1.patch
+1619788-75a1.patch
+1604616-75a1.patch
+1619867-75a1.patch
+1612060-75a1.patch
+1615511-3-75a1.patch
+1620140-1-75a1.patch
+1620140-2-75a1.patch
+1620140-4-75a1.patch
+1620140-6-75a1.patch
+1620140-7-75a1.patch
+1620140-8-75a1.patch
+1620140-9-75a1.patch
+1620449-75a1.patch
+1618879-75a1.patch
+1583854-75a1.patch
+1619555-partial-76a1.patch
+1620433-76a1.patch
+1620744-01-76a1.patch
+1620744-02-76a1.patch
+1620744-03no04-76a1.patch
+1620744-05-76a1.patch
+1620744-08-76a1.patch
+1620744-09-76a1.patch
+1620744-10-76a1.patch
+1620744-11-76a1.patch
+1620744-12-76a1.patch
+1620744-13-76a1.patch
+1620020-01-76a1.patch
+1620020-02-76a1.patch
+1620020-03-76a1.patch
+1620020-04-76a1.patch
+1620020-05-76a1.patch
+1620020-06-76a1.patch
+1620020-07-76a1.patch
+1620020-08-76a1.patch
+1620020-09-76a1.patch
+1620020-10-76a1.patch
+1620020-11-76a1.patch
+1620020-12-76a1.patch
+1620020-13-76a1.patch
+1620020-14-76a1.patch
+1620020-15-76a1.patch
+1622227-76a1.patch
+1623132-1-76a1.patch
+1623132-2-76a1.patch
+1622356-76a1.patch
+1620471-76a1.patch
+1624015-1-76a1.patch
+1624015-2-76a1.patch
+1624015-3-76a1.patch
+1624015-4-76a1.patch
+1623593-76a1.patch
+1626007-76a1.patch
+1594545-01-76a1.patch
+1594545-02-76a1.patch
+1594545-03-76a1.patch
+1594545-04-76a1.patch
+1594545-05-76a1.patch
+1594545-06-76a1.patch
+1594545-07-76a1.patch
+1594545-08-76a1.patch
+1594545-09-76a1.patch
+1594545-10-76a1.patch
+1594545-11-76a1.patch
+1594545-12-76a1.patch
+1594545-13-76a1.patch
+1613985-PARTIAL-jsoncpponly-76a1.patch
+1627439-76a1.patch
+1619154-76a1.patch
+1623952-76a1.patch
+1602271-76a1.patch
+1601140-1-76a1.patch
+1601140-2-76a1.patch
+1622021-76a1.patch
+1622405-1-76a1.patch
+1622405-2-76a1.patch
+1607193-2-76a1.patch
+1607193-3-76a1.patch
+1623656-76a1.patch
+1622974-1-76a1.patch
+1622974-2-76a1.patch
+1621322-2-76a1.patch
+1623339-1-76a1.patch
+1623339-2-76a1.patch
+1623339-3-76a1.patch
+1626104-76a1.patch
+1616584-76a1.patch
+1623765-76a1.patch
+1624190-1-76a1.patch
+1624190-2-76a1.patch
+1619460-76a1.patch
+1623982-76a1.patch
+1621439-76a1.patch
+1622789-76a1.patch
+1626163-76a1.patch
+1621198-76a1.patch
+1623684-76a1.patch
+1624670-1-76a1.patch
+1624670-2-76a1.patch
+1626550-76a1.patch
+1623321-76a1.patch
+1609823-76a1.patch
+1606703-77a1.patch
+1616353-1-77a1.patch
+1627255-1-77a1.patch
+1627255-2-77a1.patch
+1627992-77a1.patch
+1625285-77a1.patch
+1623701-77a1.patch
+1627163-01-77a1.patch
+1627163-02-77a1.patch
+1627163-03-77a1.patch
+1627163-04-77a1.patch
+1627163-05-77a1.patch
+1627163-07-77a1.patch
+1627163-08-77a1.patch
+1627163-09-77a1.patch
+1627163-10-77a1.patch
+1627163-11-77a1.patch
+1627163-12-77a1.patch
+1627163-13-77a1.patch
+1627163-15-77a1.patch
+1627163-16-77a1.patch
+1627163-17-77a1.patch
+1628683-77a1.patch
+1628205-77a1.patch
+1628748-77a1.patch
+1628641-77a1.patch
+1628498-1-77a1.patch
+1617748-77a1.patch
+1621436-77a1.patch
+1628498-2-77a1.patch
+1628131-77a1.patch
+1628976-77a1.patch
+1628927-77a1.patch
+1629159-77a1.patch
+1621359-1-77a1.patch
+1621359-2-77a1.patch
+1628663-1-77a1.patch
+1628663-2-77a1.patch
+1629595-77a1.patch
+1628621-77a1.patch
+1630426-77a1.patch
+1628954-1-77a1.patch
+1628954-2-77a1.patch
+1621440-77a1.patch
+1629797-77a1.patch
+1621441-77a1.patch
+1632354-77a1.patch
+1632353-77a1.patch
+1627072-77a1.patch
+1628726-77a1.patch
+1578917-77a1.patch
+1621361-77a1.patch
+1632348-77a1.patch
+1631063-77a1.patch
+1632461-77a1.patch
+1632770-77a1.patch
+1632974-77a1.patch
+1632300-77a1.patch
+1634834-77a1.patch
+1634187-77a1.patch
+1631211-77a1.patch
+1634623-1-78a1.patch
+1634623-2-78a1.patch
+1634623-3-78a1.patch
+1632916-78a1.patch
+1633039-78a1.patch
+1633037-78a1.patch
+1635585-78a1.patch
+1636209-78a1.patch
+1633156-78a1.patch
+1633628-78a1.patch
+1636265-78a1.patch
+1636122-78a1.patch
+1637474-1-78a1.patch
+1637474-2-78a1.patch
+1638036-78a1.patch
+1638195-PARTIAL-78a1.patch
+1639813-78a1.patch
+1638060-78a1.patch
+1624857-78a1.patch
+1641073-78a1.patch
+1635764-78a1.patch
+1641640-2-78a1.patch
+1635491-78a1.patch
+1635514-78a1.patch
+1632429-3-PARTIAL-78a1.patch
+1637778-78a1.patch
+1579329-78a1.patch
+1639151-78a1.patch
+1638948-78a1.patch
+1638951-78a1.patch
+1638967-78a1.patch
+1638982-2-78a1.patch
+1638995-78a1.patch
+1638983-78a1.patch
+1634675-78a1.patch
+1638993-78a1.patch
+1638976-78a1.patch
+1637305-78a1.patch
+1637665-78a1.patch
+1637737-78a1.patch
+1639815-1-78a1.patch
+1639815-2-78a1.patch
+1639815-3-78a1.patch
+1639815-4-78a1.patch
+1639815-5-78a1.patch
+1639815-6-78a1.patch
+1639815-7-78a1.patch
+1639815-8-78a1.patch
+1632345-78a1.patch
+1637911-78a1.patch
+1634535-78a1.patch
+1635481-78a1.patch
+1635271-78a1.patch
+1637254-2-78a1.patch
+1635573-PARTIAL-78a1.patch
+1640171-2-78a1.patch
+1631197-78a1.patch
+1638780-78a1.patch
+1637381-1-78a1.patch
+1637381-7-78a1.patch
+1640716-78a1.patch
+1641242-78a1.patch
+1639313-78a1.patch
+1639624-78a1.patch
+1643026-78a1.patch
+1634563-78a1.patch
+1635099-78a1.patch
+1637409-78a1.patch
+1633016-78a1.patch
+1639569-78a1.patch
+1638870-78a1.patch
+1619339-78a1.patch
+1638965-78a1.patch
+1638954-78a1.patch
+1638978-78a1.patch
+1127565-78a1.patch
+1621960-781.patch
+1635834-78a1.patch
+1638012-78a1.patch
+985141-1-78a1.patch
+985141-3-78a1.patch
+1642032-1-79a1.patch
+1642032-2-79a1.patch
+1642032-3-79a1.patch
+1635293-79a1.patch
+1642005-79a1.patch
+1623024-1-79a1.patch
+1623024-4-79a1.patch
+1643229-79a1.patch
+1633937-79a1.patch
+1496639-79a1.patch
+1637845-01-79a1.patch
+1637845-02-79a1.patch
+1637845-03-79a1.patch
+1637845-04-79a1.patch
+1637845-05-79a1.patch
+1637845-06-79a1.patch
+1637845-07-79a1.patch
+1637845-08-79a1.patch
+1637845-09-79a1.patch
+1637845-10-79a1.patch
+1637845-11-79a1.patch
+1637845-12-79a1.patch
+1637845-13-79a1.patch
+1637845-14-79a1.patch
+1637845-15-79a1.patch
+1637845-16-79a1.patch
+1637845-17-79a1.patch
+1637845-18-79a1.patch
+1646299-1-79a1.patch
+1646299-4-79a1.patch
+1646405-0-79a1.patch
+1646405-1-79a1.patch
+1646405-2-79a1.patch
+1646405-3-79a1.patch
+1646427-1-79a1.patch
+1646427-2-79a1.patch
+1646427-3-79a1.patch
+1646427-4-79a1.patch
+1646421-1-79a1.patch
+1646421-2-79a1.patch
+1646421-3-79a1.patch
+1646421-4-79a1.patch
+1634765-79a1.patch
+1643166-79a1.patch
+1622963-79a1.patch
+1621960-1-79a1.patch
+1621960-2-79a1.patch
+1621960-4-79a1.patch
+1621960-5-79a1.patch
+1632429-09-79a1.patch
+1632429-10-79a1.patch
+1463035-79a1.patch
+1643258-PARTIAL-79a1.patch
+1632080-79a1.patch
+1642040-79a1.patch
+1642446-79a1.patch
+1632874-1-79a1.patch
+1647865-79a1.patch
+1648336-79a1.patch
+1240930-80a1.patch
+1649850-80a1.patch
+1654796-80a1.patch
+1652675-80a1.patch
+1481425-2-80a1.patch
+1607426-80a1.patch
+1616694-1only-80a1.patch
+1650306-1-80a1.patch
+1650306-2-80a1.patch
+1650834-2-80a1.patch
+1651403-80a1.patch
+1652756-80a1.patch
+1653201-80a1.patch
+1646406-81a1.patch
+1655361-81a1.patch
+1656993-81a1.patch
+1658486-81a1.patch
+1660105-81a1.patch
+1654470-81a1.patch
+1654074-1-81a1.patch
+1657168-81a1.patch
+1652374-2only-81a1.patch
+1657650-78.patch
+1659047-81a1.patch
+1659575-81a1.patch
+1662381-78.patch
+1661485-81a1.patch
+1665675-78.patch
+1656044-PARTIAL-81a1.patch
+1659265-PARTIAL-81a1.patch
+1722225-1-killtelemetry-bhr-2539.patch
+1722225-2-killtelemetry-bhr-2539.patch
+1655835-81a1.patch
+1657504-1-81a1.patch
+1657504-2-81a1.patch
+1594914-81a1.patch
+1656611-81a1.patch
+1657677-81a1.patch
+1656614-81a1.patch
+1657717-81a1.patch
+1658651-81a1.patch
+1659539-82a1.patch
+1659542-82a1.patch
+1662775-82a1.patch
+1662819-82a1.patch
+1662851-82a1.patch
+1663863-82a1.patch
+1665494-82a1.patch
+1662793-82a1.patch
+1664210-82a1.patch
+1627944-83a1.patch
+1654457-1-83a1.patch
+1654457-2-83a1.patch
+1667394-83a1.patch
+1670039-83a1.patch
+1670784-83a1.patch
+1658308-1-83a1.patch
+1667835-83a1.patch
+1667473-1-83a1.patch
+1667473-2-83a1.patch
+1605273-83a1.patch
+1663550-8-83a1.patch
+1667896-83a1.patch
+1669615-83a1.patch
+1669471-83a1.patch
+1670130-83a1.patch
+1672563-84a1.patch
+1672506-84a1.patch
+1654103-PARTIAL-ANGLE-84a1.patch
+1661450-1no2or3-84a1.patch
+1661450-4no5-84a1.patch
+1620075-1-84a1.patch
+1620075-2-84a1.patch
+1620075-3-84a1.patch
+1620075-4-84a1.patch
+1620075-5-84a1.patch
+1677187-84a1.patch
+1672940-84a1.patch
+1674923-84a1.patch
+1675675-84a1.patch
+1675707-1-84a1.patch
+1575293-84a1.patch
+1495733-1-84a1.patch
+1675587-84a1.patch
+1661624-85a1.patch
+1680162-85a1.patch
+1666345-85a1.patch
+1667152-85a1.patch
+1680519-85a1.patch
+1681406-85a1.patch
+1677914-2only-85a1.patch
+1678291-2-85a1.patch
+1678291-3-85a1.patch
+1680152-2-85a1.patch
+1680152-3-85a1.patch
+1671545-85a1.patch
+1680345-85a1.patch
+1679056-85a1.patch
+1680152-1-85a1.patch
+1658308-2-85a1.patch
+1679073-86a1.patch
+1680802-1-86a1.patch
+1680802-2-86a1.patch
+1680802-3-86a1.patch
+1681560-86a1.patch
+1681372-86a1.patch
+1685381-86a1.patch
+1686287-86a1.patch
+1581678-86a1.patch
+1680894-86a1.patch
+1480005-3-86a1.patch
+1687812-86a1.patch
+1656894-86a1.patch
+1682604-86a1.patch
+1684163-86a1.patch
+1619197-86a1.patch
+1681160-86a1.patch
+1691695-partial-87a1.patch
+1689034-3fix-87a1.patch
+1692135-87a1.patch
+1670538-87a1.patch
+1676636-87a1.patch
+1691317-87a1.patch
+1690349-1-87a1.patch
+1690349-2-87a1.patch
+1690349-3no4-87a1.patch
+1690349-5-87a1.patch
+1690745-87a1.patch
+1340901-87a1.patch
+1691957-87a1.patch
+1692254-87a1.patch
+1692383-87a1.patch
+1695773-88a1.patch
+1699332-88a1.patch
+1700171-88a1.patch
+1696581-1-88a1.patch
+1696581-2-88a1.patch
+1696935-88a1.patch
+1690604-88a1.patch
+1692940-5-88a1.patch
+1513184-88a1.patch
+1698827-88a1.patch
+1698592-89a1.patch
+1698595-1-PARTIAL-89a1.patch
+1698595-2-89a1.patch
+1377445-1-89a1.patch
+1377445-2no3-89a1.patch
+1700621-2only-89a1.patch
+1711050-nsrefreshdriveroptimize-2538.patch
+1695161-789.patch
+1680166-1-7811.patch
+1680166-2-7811.patch
+1602862-7811.patch
+1612116-7811.patch
+1707559-7811.patch
+739096-7only-90a1.patch
+1681371-90a1.patch
+1601904-90a1.patch
+1711044-2-version-mr-2538.patch
+1703760-7811.patch
+1717309-version-mr-2538.patch
+1665836-7812.patch
+1711576-7812.patch
+1709976-7812.patch
+1704784-90a1.patch
+1676542-90a1.patch
+1706452-90a1.patch
+1707834-90a1.patch
+1710369-90a1.patch
+1710957-90a1.patch
+1704683-90a1.patch
+1709791-90a1.patch
+1712675-3-90a1.patch
+1717528-1-version-mr-2539.patch
+1714872-msvc-nosse41-2539.patch
+1416891-5-BACKOUT-2539.patch
+1711811-90a1.patch
+1705837-2-90a1.patch
+1711816-90a1.patch
+1712023-2no1-90a1.patch
+1707953-90a1.patch
+1705837-1-90a1.patch
+1711872-91a1.patch
+1717559-91a1.patch
+1713081-2only-PARTIAL-zlib-91a1.patch
+1714177-91a1.patch
+1715254-91a1.patch
+1719146-91a1.patch
+1715766-91a1.patch
+1717185-91a1.patch
+1716518-toml-91a1.patch
+1666184-7813.patch
+1720568-7813.patch
+1720031-7813.patch
+1722204-7813.patch
+1722227-removecasting-2539.patch
+1714632-92a1.patch
+1720703-92a1.patch
+1721149-92a1.patch
+1722083-7813.patch
+1717528-2-version-mr-2539.patch
+1662676-7813.patch
+1726944-version-mr-2539.patch
+1727000-1-version-mr-25310.patch
+1721370-92a1.patch
+1716613-92a1.patch
+1728996-httpbrotli-25310.patch
+1602259-2-VS2019-gyp-25310.patch
+1728988-1-VS2022-base-25310.patch
+1728988-2-VS2022-gyp-25310.patch
+1724107-7814.patch
+1721107-7814.patch
+1724101-7814.patch
+1723391-7814.patch
+1725335-7815.patch
+1728321-7815.patch
+1737436-version-25310.patch
+1727000-2-version-mr-25310.patch
+1721326-2-92a1.patch
+1713769-1-913.patch
+1713769-2-913.patch
+1737845-version-mr-25310.patch
+1720432-92a1.patch
+1727014-1-93a1.patch
+531915-1-93a1.patch
+531915-2-93a1.patch
+531915-3-93a1.patch
+531915-4-93a1.patch
+531915-5-93a1.patch
+1729748-94a1.patch
+1729611-1-94a1.patch
+1729611-2-94a1.patch
+1729611-3-94a1.patch
+1730397-4only-94a1.patch
+1723031-1-94a1.patch
+1709303-1-94a1.patch
+1709303-2-94a1.patch
+1738598-PARTIAL-95a1.patch
+1730048-913.patch
+1730935-913.patch
+1730156-913.patch
+1735152-913.patch
+1729517-913.patch
+1736049-913.patch
+1712671-913.patch
+1606864-913.patch
+1737515-914.patch
+1696685-914.patch
+1739352-914.patch
+1723281-914.patch
+1727374-914.patch
+1730120-914.patch
+1736046-914.patch
+1737009-914.patch
+1738237-914.patch
+1739091-914.patch
+1739421-914.patch
+1722833-2-95a1.patch
+1730145-96a1.patch
+1746785-rust157fix-253102.patch
+1438084-createmar-mr-253102.patch
+1737435-1-version-mr-25311.patch
+1736486-PARTIAL-96a1.patch
+1739222-96a1.patch
+1742168-PARTIAL-96a1.patch
+1743538-96a1.patch
+1743780-96a1.patch
+1730033-96a1.patch
+1511670-1-webp-96a1.patch
+1495733-2-97a1.patch
+1747754-PARTIAL-97a1.patch
+1747783-1-97a1.patch
+1747783-2-97a1.patch
+1747782-97a1.patch
+1737252-915.patch
+1740389-915.patch
+1742334-915.patch
+1735071-915.patch
+1731430-915.patch
+1737816-915.patch
+1746011-915.patch
+1746720-915.patch
+1664149-915.patch
+1748325-1-915.patch
+1748325-2-915.patch
+1748325-3-915.patch
+1747325-97a1.patch
+1746299-97a1.patch
+1744575-97a1.patch
+1748279-916.patch
+1750407-killmoztelemetry-25311.patch
+1750407-killmozhealthreport-25311.patch
+1737435-2-version-mr-25311.patch
+1750902-916.patch
+1739957-916.patch
+1743012-916.patch
+1747185-916.patch
+1750168-916.patch
+1749283-917.patch
+1755289-version-mr-25311.patch
+1750406-1-version-mr-25312.patch
+1755558-nodeprecation-25312.patch
+1743309-97a1.patch
+1748859-97a1.patch
+1742849-97a1.patch
+1744234-97a1.patch
+1432983-97a1.patch
+1737313-2-97a1.patch
+1745177-97a1.patch
+1747773-98a1.patch
+1752025-webp-98a1.patch
+1687541-webp-98a1.patch
+1753050-webp-98a1.patch
+1745860-98a1.patch
+1741873-99a1.patch
+1754724-1-99a1.patch
+1754724-2-99a1.patch
+1754724-3-99a1.patch
+1750760-1-99a1.patch
+1750760-3-99a1.patch
+1750760-4-99a1.patch
+1757308-99a1.patch
+1758062-9162.patch
+NOBUG-removemobilepromo-25312.patch
+NOBUG-disableupdates-25312.patch
+NOBUG-pocket2-25312.patch
+NOBUG-removeflashhang-25312.patch
+1756701-1-100a1.patch
+1756701-2-100a1.patch
+1762733-removepluginprefs-25312.patch
+1762733-removeflashblocking-25312.patch
+1756957-918.patch
+1761026-918.patch
+1750406-2-version-beta-mr-25312.patch
+1765521-version-release-mr-25312.patch
+1762781-1-version-prebeta-mr-25313.patch
+1753729-1only-100a1.patch
+1761799-100a1.patch
+1761974-100a1.patch
+1756061-100a1.patch
+1088140-100a1.patch
+1762614-1-101a1.patch
+1762614-2-101a1.patch
+1764778-919.patch
+1684739-919.patch
+1762125-919.patch
+1762620-919.patch
+1660745-101a1.patch
+1766853-101a1.patch
+1765474-3only-101a1.patch
+1766081-101a1.patch
+1761534-2-101a1.patch
+1758008-101a1.patch
+1771434-102a1.patch
+NOBUG-cleanbootstrap-25313.patch
+1730434-9110.patch
+1770137-1-9110.patch
+1770137-2-9110.patch
+1770048-9110.patch
+1762781-2-version-beta-mr-25313.patch
+1765049-9191.patch
+1743767-9110.patch
+1771381-9111.patch
+1770123-9111.patch
+1497246-9111.patch
+1757604-9111.patch
+1773717-9111.patch
+1769627-102a.patch
+1772805-version-release-mr-25313.patch
+1772804-1-version-prebeta-mr-25314.patch
+1761764-102a1.patch
+1766848-102a1.patch
+1142667-102a1.patch
+1768568-102a1.patch
+1766085-102a1.patch
+1761275-webp-102a1.patch
+1776344-103a1.patch
+1773952-103a1.patch
+1773584-103a1.patch
+1772635-104a1.patch
+1743947-104a1.patch
+NOBUG-vendorrust-25314.patch
+1779037-removewhitelist-25314.patch
+NOBUG-wfx-pgo-25314.patch
+1783784-105a1.patch
+1595259-1-105a1.patch
+1595259-2-105a1.patch
+1595259-3-105a1.patch
+1776210-105a1.patch
+1782988-1only-105a1.patch
+1783985-1-105a1.patch
+1783985-2no3-105a1.patch
+1772804-2-version-beta-mr-25314.patch
+1786135-version-release-mr-25314.patch
+1786133-1-version-prebeta-mr-25315.patch
+1392929-mc-contentprefs2-25315.patch
+NOBUG-ppcheck-25315.patch
+1788233-106a1.patch
+1792041-1024.patch
+1785953-106a1.patch
+1787959-106a1.patch
+1789729-1024.patch
+1737436-2-version-25315.patch
+1789560-107a1.patch
+1791598-107a1.patch
+1734650-108a1.patch
+1786133-2-version-beta-mr-25315.patch
+1796811-108a1.patch
+1767920-1025.patch
+1797336-108a1.patch
+1761303-108a1.patch
+1789808-1025.patch
+1799748-1025.patch
+1746139-1026.patch
+1633019-1026.patch
+1801315-1026.patch
+1801102-1026.patch
+1687303-1026.patch
+1795778-version-release-mr-25315.patch
+1795774-1-version-prebeta-mr-25316.patch
+1795324-108a1.patch
+1795568-108a1.patch
+1796013-PARTIAL-108a1.patch
+1799982-108a1.patch
+1806974-1027.patch
+1800425-1027.patch
+1777800-1027.patch
+1801894-109a1.patch
+1804298-3no12-109a1.patch
+1804298-4-109a1.patch
+1801893-webp-109a1.patch
+1803469-webp-109a1.patch
+1801583-109a1.patch
+1787515-109a1.patch
+1782344-1-110a1.patch
+1782344-2-110a1.patch
+1782344-3-110a1.patch
+1782344-4-110a1.patch
+1782344-5-110a1.patch
+1782344-6-110a1.patch
+1760633-1-110a1.patch
+1760633-2-110a1.patch
+1760633-3-110a1.patch
+1810078-webp-111a1.patch
+1815737-111a1.patch
+1819374-4-112a1.patch
+1816737-112a1.patch
+1817900-13-112a1.patch
+NOBUG-licensepaths-25316.patch
+NOBUG-msvc-py3-25316.patch
+NOBUG-nofeatures-repack-25316.patch
+NOBUG-killtelemetry-ext-25316.patch
+NOBUG-killtelemetrytests-25316.patch
+1371065-1-sdk-removetests-25316.patch
+1371065-2-sdk-removemisc-25316.patch
+1371065-3-sdk-removemore-25316.patch
+1812155-cleanup-wcreporter-25316.patch
+1790160-1-1028.patch
+1790160-2-1028.patch
+1813424-1028.patch
+1811939-1028.patch
+1795774-2-version-beta-mr-25316.patch
+1811627-1029.patch
+1817442-1029.patch
+1816667-25316.patch
+1817655-version-release-mr-25316.patch
+1817654-1-version-prebeta-mr-25317.patch
+1814899-1029.patch
+1818674-1029.patch
+1817768-1029.patch
+1784348-10210.patch
+1823077-10210.patch
+1822216-113a1.patch
+1819244-webp-113a1.patch
+1826666-10211.patch
+1645865-10211.patch
+1827019-10211.patch
+1111233-115a1.patch
+1832984-115a1.patch
+1832708-115a1.patch
+NOBUG-cleanextensions-25317.patch
+NOBUG-removegctel-25317.patch
+NOBUG-disabledatareporting-25317.patch
+NOBUG-killtelemetrystartup-25317.patch
+NOBUG-killtelemetry-docshell-25317.patch
+1817654-2-version-beta-mr-25317.patch
+NOBUG-histo-utf-25317.patch
+1842686-stackoverflow-25317.patch
+1813299-116a1.patch
+1836529-webp-116a1.patch
+1840202-webp-116a1.patch
+1846080-10215.patch
+1841943-117a1.patch
+1837263-version-release-mr-25317.patch
+1837261-1-version-prebeta-mr-25318.patch
+NOBUG-removemobilethemes-25318.patch
+1842688-disablemaint-mozilla-25318.patch
+1842687-bundledfonts-25318.patch
+1850034-2only-118a1.patch
+1845205-118a1.patch
+1849470-1only-118a1.patch
+1849874-11503.patch
+1855550-11504.patch
+1852649-webp-119a1.patch
+1853098-webp-119a1.patch
+1852749-webp-119a1.patch
+1738426-119a1.patch
+1802057-119a1.patch
+1849433-11504.patch
+1801501-PARTIAL-NOTESTS-120a1.patch
+1836607-11504.patch
+1648336-120a1.patch
+1835524-sym-upload-fix-v1_2-25318.patch
+1835524-bugsplat-mr-v1_6-25318.patch
+1858551-crashreporter-vendor-v1_2-25318.patch
+1858570-11505.patch
+1854076-11505.patch
+1721612-11506.patch
+1837261-2-version-beta-mr-25318.patch
+1861842-version-release-mr-25318.patch
+1861843-1-version-prebeta-mr-25319.patch
+1826791-121a1.patch
+1660223-11507.patch
+1864385-PARTIAL-11508.patch
+1867982-124a1.patch
+1878211-11508.patch
+1871112-124a1.patch
+1881093-11509.patch
+NOBUG-removessdks-25319.patch
+NOBUG-nukemozlinker-25319.patch
+1462261-3-25319.patch
+NOBUG-textrange-25319.patch
+1888364-openurl-25319.patch
+PPPPPPP-check_stdcxx-warn.patch
+PPPPPPP-NOBUG-PLASTER-getrandom.patch
+PPPPPPP-NSSgetentropy.patch
+WIP-1729459-comment25.patch
+TOP-1294490-7-PLASTER-webp-2535.patch
+TOP-1493400-6-PLASTER-dav1d-avoid-mColorDepth-2535.patch
+TOP-1445683-14-PLASTER-aom-fix-win32-bustage-2535.patch
+TOP-1683545-PLASTER-webrender-2536.patch
+TOP-1667581-3-PLASTER-2537.patch
+TOP-1699835-PARTIAL-7810.patch
+TOP-1758291-fixgithubpolyfill-253111.patch
+TOP-1398895-2a-57a1.patch
+TOP-NOBUG-skiptests-25312.patch
+TOP-NOBUG-dav1d-V1-support-25312.patch
+TOP-NOBUG-unfiedloadicon-25312.patch
+TOP-NOBUG-nometadata-25312.patch
+TOP-1641640-BACKOUT-25313.patch
+TOP-NOBUG-fixup-VS2022-25313.patch
+TOP-1779027-freebsd-25314.patch
+TOP-1722226-aarch64-webrtc-25315.patch
+TOP-NOBUG-nsslink-25315.patch
+TOP-NOBUG-fixtests-25315.patch
+TOP-NOBUG-nonodedefault-25315.patch
+TOP-1797696-macos11sdk-25315.patch
+TOP-1804537-macostransparent-25315.patch
+TOP-1804537-macosfullscreen-25315.patch
+TOP-1804539-fixlangpack-25316.patch
+TOP-1750671-1only-PARTIAL-98a1.patch
+TOP-1788837-PARTIAL-108a1.patch
+TOP-1807802-shared-tree-styling-25316.patch
+TOP-1584803-rust133.patch
+TOP-1584803-rust135.patch
+TOP-NOBUG-cubeb-25317.patch
+TOP-NOBUG-PLASTER-IOSurface-fix-25317.patch
+TOP-1512450-60.patch
+TOP-NOBUG-PLASTER-wayland-25317.patch
+TOP-NOBUG-PLASTER-Stylo-25314.patch
+TOP-1834230-HTMLTableEditor-tb-td-25317.patch
+TOP-1794292-1-10210.patch
+TOP-1794292-2-10210.patch
+TOP-NOBUG-PLASTER-PY3-Codegen-25317.patch
+TOP-NOBUG-PLASTER-PY3-GenerateCSSPropsGenerated-25317.patch
+TOP-NOBUG-PLASTER-PY3-idl-parser-25317.patch
+TOP-NOBUG-PLASTER-PY3-typelib-25317.patch
+TOP-NOBUG-PLASTER-PY3-check_binary-25317.patch
+TOP-1620143-PARTIAL-PY3-dependentlibs-75a1.patch
+TOP-NOBUG-PLASTER-PY3-25317.patch
+TOP-NOBUG-PLASTER-PY310_support-25314.patch
+TOP-NOBUG-PLASTER-PY311_support-25317.patch
+TOP-NOBUG-enableCE-25318.patch
+TOP-NOBUG-revendor-25318.patch
+TOP-NOBUG-test-fixes-25318.patch
+TOP-NOBUG-PLASTER-fix-strip-25319.patch
+TOP-1707096-91a1.patch
+TOP-1846703-binutilsfix-11504.patch
+TOP-1859635-NSS3901-11506.patch
+TOP-1880562-NSS3902-11509.patch
+TOP-1864587-angle-11507.patch
+TOP-1466000-1-optchain-64a1-25313.patch
+TOP-1518661-3-67a1-25319.patch
+TOP-1566143-1to2-optchain-74a1-25313.patch
+TOP-1566143-3-optchain-74a1-25313.patch
+TOP-1610447-optchain-74a1-25313.patch
+TOP-1611777-12-74a1-25313.patch
+TOP-NOBUG-optchain-baselinejit-25313.patch
+TOP-1629106-1-logicassign-25317.patch
+TOP-1629106-2-logicassign-25317.patch
+TOP-NOBUG-backout1440761-25318.patch
+TOP-NOBUG-killtelemetry-debugger-25319.patch
+TOP-NOBUG-fixcompile-25319.patch
+TOP-NOBUG-JSFIXUPS-25319.patch
+TOP-NOBUG-REGEXP-01-Import-25318.patch
+TOP-NOBUG-REGEXP-02-1361856-1-dotall-76a1-25318.patch
+TOP-NOBUG-REGEXP-03-1537978-68a1-25318.patch
+TOP-NOBUG-REGEXP-04-1539690-68a1-25318.patch
+TOP-1541286-68a1.patch
+TOP-NOBUG-REGEXP-05-1546300-68a1-25318.patch
+TOP-NOBUG-REGEXP-06-1504947-10-68a1-25318.patch
+TOP-NOBUG-REGEXP-07-1626713-76a1-25318.patch
+TOP-NOBUG-REGEXP-09-1627356-77a1-25318.patch
+TOP-NOBUG-REGEXP-10-1627838-77a1-25318.patch
+TOP-NOBUG-REGEXP-11-deunify-25318.patch
+TOP-NOBUG-REGEXP-12-1628835-77a1-25318.patch
+TOP-NOBUG-REGEXP-13-1361856-2-76a1-25318.patch
+TOP-NOBUG-REGEXP-14-1629670-77a1-25318.patch
+TOP-NOBUG-REGEXP-15-1630090-1-77a1-25318.patch
+TOP-NOBUG-REGEXP-16-1630090-2-77a1-25318.patch
+TOP-1630383-02-77a1.patch
+TOP-1630383-07-77a1.patch
+TOP-NOBUG-REGEXP-17-1630383-77a1-25318.patch
+TOP-1607405-77a1.patch
+TOP-1636495-1-78a1.patch
+TOP-1636495-2no3-78a1.patch
+TOP-1637199-78a1.patch
+TOP-NOBUG-REGEXP-21-1634135-78a1-25318.patch
+TOP-NOBUG-REGEXP-22-1637977-78a1-25318.patch
+TOP-NOBUG-REGEXP-23-1637913-78a1-25318.patch
+TOP-NOBUG-REGEXP-24-1631504-77a1-25318.patch
+TOP-NOBUG-REGEXP-25-1362154-1to4-78a1-25318.patch
+TOP-NOBUG-REGEXP-26-1362154-5to9-78a1-25318.patch
+TOP-NOBUG-REGEXP-27-1640487-78a1-25318.patch
+TOP-NOBUG-REGEXP-28-1640592-78a1-25318.patch
+TOP-NOBUG-REGEXP-29-1640475-78a1-25318.patch
+TOP-NOBUG-REGEXP-30-1640479-78a1-25318.patch
+TOP-NOBUG-REGEXP-31-1640473-78a1-25318.patch
+TOP-NOBUG-REGEXP-32-1638154-78a1-25318.patch
+TOP-NOBUG-REGEXP-33-1641352-79a1-25318.patch
+TOP-NOBUG-REGEXP-34-1361856-1-fix-76a1-25318.patch
+TOP-NOBUG-REGEXP-35-1435829-66a1-25318.patch
+TOP-NOBUG-REGEXP-36-1590543-73a1-25318.patch
+TOP-NOBUG-REGEXP-37-1642493-79a1-25318.patch
+TOP-NOBUG-REGEXP-38-1662073-82a1-25318.patch
+TOP-NOBUG-REGEXP-39-1681084-1-85a1-25318.patch
+TOP-NOBUG-REGEXP-40-1644590-79a1-25318.patch
+TOP-NOBUG-REGEXP-41-1667094-83a1-25318.patch
+TOP-NOBUG-REGEXP-42-1643171-79a1-25318.patch
+TOP-NOBUG-REGEXP-43-1691184-88a1-25318.patch
+TOP-NOBUG-REGEXP-44-irregexp-25318.patch
+TOP-NOBUG-REGEXP-45-final-25318.patch
+TOP-NOBUG-REGEXP-46-fixes-25318.patch
+TOP-NOBUG-REGEXP-47-fixes-25319.patch

Some files were not shown because too many files changed in this diff