Bug 1865103 - Allow ArrayBuffer.prototype.transfer to be enabled outside of nightly r=anba

Differential Revision: https://phabricator.services.mozilla.com/D195572
This commit is contained in:
Matthew Gaudet 2023-12-11 17:41:30 +00:00
parent 65d35bfd22
commit 2411e23a36
5 changed files with 25 additions and 28 deletions

View File

@ -228,6 +228,12 @@ class JS_PUBLIC_API RealmCreationOptions {
return *this;
}
bool getArrayBufferTransferEnabled() const { return arrayBufferTransfer_; }
RealmCreationOptions& setArrayBufferTransferEnabled(bool flag) {
arrayBufferTransfer_ = flag;
return *this;
}
#ifdef NIGHTLY_BUILD
bool getNewSetMethodsEnabled() const { return newSetMethods_; }
RealmCreationOptions& setNewSetMethodsEnabled(bool flag) {
@ -235,12 +241,6 @@ class JS_PUBLIC_API RealmCreationOptions {
return *this;
}
bool getArrayBufferTransferEnabled() const { return arrayBufferTransfer_; }
RealmCreationOptions& setArrayBufferTransferEnabled(bool flag) {
arrayBufferTransfer_ = flag;
return *this;
}
bool getSymbolsAsWeakMapKeysEnabled() const { return symbolsAsWeakMapKeys_; }
RealmCreationOptions& setSymbolsAsWeakMapKeysEnabled(bool flag) {
symbolsAsWeakMapKeys_ = flag;
@ -318,10 +318,12 @@ class JS_PUBLIC_API RealmCreationOptions {
#ifdef NIGHTLY_BUILD
// Pref for new Set.prototype methods.
bool newSetMethods_ = false;
// Pref for ArrayBuffer.prototype.transfer{,ToFixedLength}() methods.
bool arrayBufferTransfer_ = false;
bool symbolsAsWeakMapKeys_ = false;
#endif
// Pref for ArrayBuffer.prototype.transfer{,ToFixedLength}() methods.
bool arrayBufferTransfer_ = false;
bool secureContext_ = false;
bool freezeBuiltins_ = false;
bool forceUTC_ = false;

View File

@ -747,9 +747,10 @@ bool shell::enableArrayGrouping = false;
// Pref for new Set.prototype methods.
bool shell::enableNewSetMethods = false;
// Pref for ArrayBuffer.prototype.transfer{,ToFixedLength}() methods.
bool shell::enableArrayBufferTransfer = false;
bool shell::enableSymbolsAsWeakMapKeys = false;
#endif
bool shell::enableArrayBufferTransfer = false;
bool shell::enableImportAssertions = false;
#ifdef JS_GC_ZEAL
uint32_t shell::gZealBits = 0;
@ -4133,9 +4134,9 @@ static void SetStandardRealmOptions(JS::RealmOptions& options) {
.setShadowRealmsEnabled(enableShadowRealms)
.setWellFormedUnicodeStringsEnabled(enableWellFormedUnicodeStrings)
.setArrayGroupingEnabled(enableArrayGrouping)
.setArrayBufferTransferEnabled(enableArrayBufferTransfer)
#ifdef NIGHTLY_BUILD
.setNewSetMethodsEnabled(enableNewSetMethods)
.setArrayBufferTransferEnabled(enableArrayBufferTransfer)
.setSymbolsAsWeakMapKeysEnabled(enableSymbolsAsWeakMapKeys)
#endif
;
@ -12202,10 +12203,10 @@ bool SetContextOptions(JSContext* cx, const OptionParser& op) {
enableArrayGrouping = !op.getBoolOption("disable-array-grouping");
#ifdef NIGHTLY_BUILD
enableNewSetMethods = op.getBoolOption("enable-new-set-methods");
enableArrayBufferTransfer = op.getBoolOption("enable-arraybuffer-transfer");
enableSymbolsAsWeakMapKeys =
op.getBoolOption("enable-symbols-as-weakmap-keys");
#endif
enableArrayBufferTransfer = op.getBoolOption("enable-arraybuffer-transfer");
enableImportAssertions = op.getBoolOption("enable-import-assertions");
useFdlibmForSinCosTan = op.getBoolOption("use-fdlibm-for-sin-cos-tan");

View File

@ -348,19 +348,15 @@ static const JSPropertySpec arraybuffer_properties[] = {
static const JSFunctionSpec arraybuffer_proto_functions[] = {
JS_SELF_HOSTED_FN("slice", "ArrayBufferSlice", 2, 0),
#ifdef NIGHTLY_BUILD
JS_FN("transfer", ArrayBufferObject::transfer, 0, 0),
JS_FN("transferToFixedLength", ArrayBufferObject::transferToFixedLength, 0,
0),
#endif
JS_FS_END,
};
static const JSPropertySpec arraybuffer_proto_properties[] = {
JS_PSG("byteLength", ArrayBufferObject::byteLengthGetter, 0),
#ifdef NIGHTLY_BUILD
JS_PSG("detached", ArrayBufferObject::detachedGetter, 0),
#endif
JS_STRING_SYM_PS(toStringTag, "ArrayBuffer", JSPROP_READONLY),
JS_PS_END,
};
@ -415,7 +411,6 @@ bool ArrayBufferObject::byteLengthGetter(JSContext* cx, unsigned argc,
return CallNonGenericMethod<IsArrayBuffer, byteLengthGetterImpl>(cx, args);
}
#ifdef NIGHTLY_BUILD
/**
* ArrayBufferCopyAndDetach ( arrayBuffer, newLength, preserveResizability )
*
@ -555,7 +550,6 @@ bool ArrayBufferObject::transferToFixedLength(JSContext* cx, unsigned argc,
return CallNonGenericMethod<IsArrayBuffer, transferToFixedLengthImpl>(cx,
args);
}
#endif
/*
* ArrayBuffer.isView(obj); ES6 (Dec 2013 draft) 24.1.3.1

View File

@ -786,9 +786,9 @@ static mozilla::Atomic<bool> sWellFormedUnicodeStringsEnabled(true);
static mozilla::Atomic<bool> sArrayGroupingEnabled(false);
#ifdef NIGHTLY_BUILD
static mozilla::Atomic<bool> sNewSetMethodsEnabled(false);
static mozilla::Atomic<bool> sArrayBufferTransferEnabled(false);
static mozilla::Atomic<bool> sSymbolsAsWeakMapKeysEnabled(false);
#endif
static mozilla::Atomic<bool> sArrayBufferTransferEnabled(false);
static JS::WeakRefSpecifier GetWeakRefsEnabled() {
if (!sWeakRefsEnabled) {
@ -814,9 +814,9 @@ void xpc::SetPrefableRealmOptions(JS::RealmOptions& options) {
.setShadowRealmsEnabled(sShadowRealmsEnabled)
.setWellFormedUnicodeStringsEnabled(sWellFormedUnicodeStringsEnabled)
.setArrayGroupingEnabled(sArrayGroupingEnabled)
.setArrayBufferTransferEnabled(sArrayBufferTransferEnabled)
#ifdef NIGHTLY_BUILD
.setNewSetMethodsEnabled(sNewSetMethodsEnabled)
.setArrayBufferTransferEnabled(sArrayBufferTransferEnabled)
.setSymbolsAsWeakMapKeysEnabled(sSymbolsAsWeakMapKeysEnabled)
#endif
;
@ -1023,11 +1023,11 @@ static void ReloadPrefsCallback(const char* pref, void* aXpccx) {
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.iterator_helpers");
sNewSetMethodsEnabled =
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.new_set_methods");
sArrayBufferTransferEnabled = Preferences::GetBool(
JS_OPTIONS_DOT_STR "experimental.arraybuffer_transfer");
sSymbolsAsWeakMapKeysEnabled = Preferences::GetBool(
JS_OPTIONS_DOT_STR "experimental.symbols_as_weakmap_keys");
#endif
sArrayBufferTransferEnabled =
Preferences::GetBool(JS_OPTIONS_DOT_STR "arraybuffer_transfer");
#ifdef JS_GC_ZEAL
int32_t zeal = Preferences::GetInt(JS_OPTIONS_DOT_STR "gczeal", -1);

View File

@ -7512,19 +7512,19 @@
value: false
mirror: always
# Experimental support for ArrayBuffer.prototype.transfer{,ToFixedLength}() in JavaScript.
- name: javascript.options.experimental.arraybuffer_transfer
type: bool
value: false
mirror: always
# Experimental support for Symbols as WeakMap keys in JavaScript.
# Experimental support for Symbols as WeakMap keys in JavaScript.
- name: javascript.options.experimental.symbols_as_weakmap_keys
type: bool
value: false
mirror: always
#endif // NIGHTLY_BUILD
# Experimental support for ArrayBuffer.prototype.transfer{,ToFixedLength}() in JavaScript.
- name: javascript.options.arraybuffer_transfer
type: bool
value: false
mirror: always
#ifdef NIGHTLY_BUILD
# Experimental support for Import Assertions in JavaScript.
- name: javascript.options.experimental.import_assertions