Bug 1842773 - Part 1: Add prefs for resizable ArrayBuffers and growable SharedArrayBuffers. r=sfink

There's intentionally only a single shell option which controls both options.
This makes testing easier and the test262 tests are also using a single
feature flag for resizable ArrayBuffers and growable SharedArrayBuffers.

Differential Revision: https://phabricator.services.mozilla.com/D183317
This commit is contained in:
André Bargull 2024-01-29 10:44:19 +00:00
parent 4996fdb5eb
commit c32a63c94c
5 changed files with 47 additions and 0 deletions

View file

@ -246,6 +246,20 @@ class JS_PUBLIC_API RealmCreationOptions {
symbolsAsWeakMapKeys_ = flag;
return *this;
}
bool getArrayBufferResizableEnabled() const { return arrayBufferResizable_; }
RealmCreationOptions& setArrayBufferResizableEnabled(bool flag) {
arrayBufferResizable_ = flag;
return *this;
}
bool getSharedArrayBufferGrowableEnabled() const {
return sharedArrayBufferGrowable_;
}
RealmCreationOptions& setSharedArrayBufferGrowableEnabled(bool flag) {
sharedArrayBufferGrowable_ = flag;
return *this;
}
#endif
// This flag doesn't affect JS engine behavior. It is used by Gecko to
@ -319,6 +333,10 @@ class JS_PUBLIC_API RealmCreationOptions {
// Pref for new Set.prototype methods.
bool newSetMethods_ = false;
bool symbolsAsWeakMapKeys_ = false;
// Pref for resizable ArrayBuffers.
bool arrayBufferResizable_ = false;
// Pref for growable SharedArrayBuffers.
bool sharedArrayBufferGrowable_ = false;
#endif
// Pref for ArrayBuffer.prototype.transfer{,ToFixedLength}() methods.

View file

@ -747,6 +747,8 @@ bool shell::enableArrayGrouping = false;
bool shell::enableNewSetMethods = false;
// Pref for ArrayBuffer.prototype.transfer{,ToFixedLength}() methods.
bool shell::enableSymbolsAsWeakMapKeys = false;
// Pref for resizable ArrayBuffers and growable SharedArrayBuffers.
bool shell::enableArrayBufferResizable = false;
#endif
bool shell::enableArrayBufferTransfer = true;
bool shell::enableImportAttributes = false;
@ -4142,6 +4144,8 @@ static void SetStandardRealmOptions(JS::RealmOptions& options) {
#ifdef NIGHTLY_BUILD
.setNewSetMethodsEnabled(enableNewSetMethods)
.setSymbolsAsWeakMapKeysEnabled(enableSymbolsAsWeakMapKeys)
.setArrayBufferResizableEnabled(enableArrayBufferResizable)
.setSharedArrayBufferGrowableEnabled(enableArrayBufferResizable)
#endif
;
}
@ -11707,6 +11711,9 @@ bool InitOptionParser(OptionParser& op) {
"Disable ArrayBuffer.prototype.transfer() methods") ||
!op.addBoolOption('\0', "enable-symbols-as-weakmap-keys",
"Enable Symbols As WeakMap keys") ||
!op.addBoolOption(
'\0', "enable-arraybuffer-resizable",
"Enable resizable ArrayBuffers and growable SharedArrayBuffers") ||
!op.addBoolOption('\0', "enable-top-level-await",
"Enable top-level await") ||
!op.addBoolOption('\0', "enable-class-static-blocks",
@ -12236,6 +12243,7 @@ bool SetContextOptions(JSContext* cx, const OptionParser& op) {
enableNewSetMethods = op.getBoolOption("enable-new-set-methods");
enableSymbolsAsWeakMapKeys =
op.getBoolOption("enable-symbols-as-weakmap-keys");
enableArrayBufferResizable = op.getBoolOption("enable-arraybuffer-resizable");
#endif
enableArrayBufferTransfer = !op.getBoolOption("disable-arraybuffer-transfer");
enableImportAttributesAssertSyntax =

View file

@ -130,6 +130,7 @@ extern bool enableShadowRealms;
extern bool enableArrayGrouping;
extern bool enableWellFormedUnicodeStrings;
extern bool enableArrayBufferTransfer;
extern bool enableArrayBufferResizable;
extern bool enableSymbolsAsWeakMapKeys;
extern bool enableNewSetMethods;
extern bool enableImportAttributes;

View file

@ -787,6 +787,8 @@ static mozilla::Atomic<bool> sArrayGroupingEnabled(false);
#ifdef NIGHTLY_BUILD
static mozilla::Atomic<bool> sNewSetMethodsEnabled(false);
static mozilla::Atomic<bool> sSymbolsAsWeakMapKeysEnabled(false);
static mozilla::Atomic<bool> sArrayBufferResizableEnabled(false);
static mozilla::Atomic<bool> sSharedArrayBufferGrowableEnabled(false);
#endif
static mozilla::Atomic<bool> sArrayBufferTransferEnabled(false);
@ -818,6 +820,8 @@ void xpc::SetPrefableRealmOptions(JS::RealmOptions& options) {
#ifdef NIGHTLY_BUILD
.setNewSetMethodsEnabled(sNewSetMethodsEnabled)
.setSymbolsAsWeakMapKeysEnabled(sSymbolsAsWeakMapKeysEnabled)
.setArrayBufferResizableEnabled(sArrayBufferResizableEnabled)
.setSharedArrayBufferGrowableEnabled(sSharedArrayBufferGrowableEnabled)
#endif
;
}
@ -1025,6 +1029,10 @@ static void ReloadPrefsCallback(const char* pref, void* aXpccx) {
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.new_set_methods");
sSymbolsAsWeakMapKeysEnabled = Preferences::GetBool(
JS_OPTIONS_DOT_STR "experimental.symbols_as_weakmap_keys");
sArrayBufferResizableEnabled = Preferences::GetBool(
JS_OPTIONS_DOT_STR "experimental.arraybuffer_resizable");
sSharedArrayBufferGrowableEnabled = Preferences::GetBool(
JS_OPTIONS_DOT_STR "experimental.sharedarraybuffer_growable");
#endif
sArrayBufferTransferEnabled =
Preferences::GetBool(JS_OPTIONS_DOT_STR "arraybuffer_transfer");

View file

@ -7479,6 +7479,18 @@
type: bool
value: false
mirror: always
# Experimental support for resizable ArrayBuffers in JavaScript.
- name: javascript.options.experimental.arraybuffer_resizable
type: bool
value: false
mirror: always
# Experimental support for growable SharedArrayBuffers in JavaScript.
- name: javascript.options.experimental.sharedarraybuffer_growable
type: bool
value: false
mirror: always
#endif // NIGHTLY_BUILD
# Experimental support for ArrayBuffer.prototype.transfer{,ToFixedLength}() in JavaScript.