Bug 1850755 - Part 1: Turn on well-formed-unicode-strings by default in Browser and JS Shell. r=spidermonkey-reviewers,jandem

Well-Formed Unicode strings is in TC39 Stage 4 and has been merged into
ECMA262 spec,
https://github.com/tc39/ecma262/pull/3039

Differential Revision: https://phabricator.services.mozilla.com/D187182
This commit is contained in:
Yoshi Cheng-Hao Huang 2023-09-08 08:54:09 +00:00
Родитель 10c80b9a46
Коммит e1dd3942ec
6 изменённых файлов: 27 добавлений и 41 удалений

Просмотреть файл

@ -204,13 +204,6 @@ class JS_PUBLIC_API RealmCreationOptions {
return *this;
}
#ifdef NIGHTLY_BUILD
bool getArrayGroupingEnabled() const { return arrayGrouping_; }
RealmCreationOptions& setArrayGroupingEnabled(bool flag) {
arrayGrouping_ = flag;
return *this;
}
bool getWellFormedUnicodeStringsEnabled() const {
return wellFormedUnicodeStrings_;
}
@ -219,6 +212,13 @@ class JS_PUBLIC_API RealmCreationOptions {
return *this;
}
#ifdef NIGHTLY_BUILD
bool getArrayGroupingEnabled() const { return arrayGrouping_; }
RealmCreationOptions& setArrayGroupingEnabled(bool flag) {
arrayGrouping_ = flag;
return *this;
}
bool getNewSetMethodsEnabled() const { return newSetMethods_; }
RealmCreationOptions& setNewSetMethodsEnabled(bool flag) {
newSetMethods_ = flag;
@ -292,10 +292,10 @@ class JS_PUBLIC_API RealmCreationOptions {
bool propertyErrorMessageFix_ = false;
bool iteratorHelpers_ = false;
bool shadowRealms_ = false;
// Pref for String.prototype.{is,to}WellFormed() methods.
bool wellFormedUnicodeStrings_ = true;
#ifdef NIGHTLY_BUILD
bool arrayGrouping_ = false;
// Pref for String.prototype.{is,to}WellFormed() methods.
bool wellFormedUnicodeStrings_ = false;
// Pref for new Set.prototype methods.
bool newSetMethods_ = false;
// Pref for ArrayBuffer.prototype.transfer{,ToFixedLength}() methods.

Просмотреть файл

@ -1562,7 +1562,6 @@ static bool str_normalize(JSContext* cx, unsigned argc, Value* vp) {
#endif // JS_HAS_INTL_API
#ifdef NIGHTLY_BUILD
/**
* IsStringWellFormedUnicode ( string )
* https://tc39.es/ecma262/#sec-isstringwellformedunicode
@ -1693,8 +1692,6 @@ static const JSFunctionSpec wellFormed_functions[] = {
JS_FN("isWellFormed", str_isWellFormed, 0, 0),
JS_FN("toWellFormed", str_toWellFormed, 0, 0), JS_FS_END};
#endif // NIGHTLY_BUILD
static bool str_charAt(JSContext* cx, unsigned argc, Value* vp) {
AutoJSMethodProfilerEntry pseudoFrame(cx, "String.prototype", "charAt");
CallArgs args = CallArgsFromVp(argc, vp);
@ -4040,13 +4037,11 @@ static bool StringClassFinish(JSContext* cx, HandleObject ctor,
return false;
}
#ifdef NIGHTLY_BUILD
// Define isWellFormed/toWellFormed functions.
if (cx->realm()->creationOptions().getWellFormedUnicodeStringsEnabled() &&
!JS_DefineFunctions(cx, nativeProto, wellFormed_functions)) {
return false;
}
#endif
return true;
}

Просмотреть файл

@ -741,10 +741,10 @@ bool shell::enableToSource = false;
bool shell::enablePropertyErrorMessageFix = false;
bool shell::enableIteratorHelpers = false;
bool shell::enableShadowRealms = false;
// Pref for String.prototype.{is,to}WellFormed() methods.
bool shell::enableWellFormedUnicodeStrings = true;
#ifdef NIGHTLY_BUILD
bool shell::enableArrayGrouping = false;
// Pref for String.prototype.{is,to}WellFormed() methods.
bool shell::enableWellFormedUnicodeStrings = false;
// Pref for new Set.prototype methods.
bool shell::enableNewSetMethods = false;
// Pref for ArrayBuffer.prototype.transfer{,ToFixedLength}() methods.
@ -4135,9 +4135,9 @@ static void SetStandardRealmOptions(JS::RealmOptions& options) {
.setPropertyErrorMessageFixEnabled(enablePropertyErrorMessageFix)
.setIteratorHelpersEnabled(enableIteratorHelpers)
.setShadowRealmsEnabled(enableShadowRealms)
.setWellFormedUnicodeStringsEnabled(enableWellFormedUnicodeStrings)
#ifdef NIGHTLY_BUILD
.setArrayGroupingEnabled(enableArrayGrouping)
.setWellFormedUnicodeStringsEnabled(enableWellFormedUnicodeStrings)
.setNewSetMethodsEnabled(enableNewSetMethods)
.setArrayBufferTransferEnabled(enableArrayBufferTransfer)
#endif
@ -11640,9 +11640,9 @@ bool InitOptionParser(OptionParser& op) {
!op.addBoolOption('\0', "enable-shadow-realms", "Enable ShadowRealms") ||
!op.addBoolOption('\0', "enable-array-grouping",
"Enable Array.grouping") ||
!op.addBoolOption('\0', "enable-well-formed-unicode-strings",
"Enable String.prototype.{is,to}WellFormed() methods"
"(Well-Formed Unicode Strings)") ||
!op.addBoolOption('\0', "disable-well-formed-unicode-strings",
"Disable String.prototype.{is,to}WellFormed() methods"
"(Well-Formed Unicode Strings) (default: Enabled)") ||
!op.addBoolOption('\0', "enable-new-set-methods",
"Enable New Set methods") ||
!op.addBoolOption('\0', "enable-arraybuffer-transfer",
@ -12152,10 +12152,10 @@ bool SetContextOptions(JSContext* cx, const OptionParser& op) {
!op.getBoolOption("disable-property-error-message-fix");
enableIteratorHelpers = op.getBoolOption("enable-iterator-helpers");
enableShadowRealms = op.getBoolOption("enable-shadow-realms");
enableWellFormedUnicodeStrings =
!op.getBoolOption("disable-well-formed-unicode-strings");
#ifdef NIGHTLY_BUILD
enableArrayGrouping = op.getBoolOption("enable-array-grouping");
enableWellFormedUnicodeStrings =
op.getBoolOption("enable-well-formed-unicode-strings");
enableNewSetMethods = op.getBoolOption("enable-new-set-methods");
enableArrayBufferTransfer = op.getBoolOption("enable-arraybuffer-transfer");
#endif

Просмотреть файл

@ -1,9 +0,0 @@
// Calling String.prototype.isWellFormed() or toWellFormed() should throw a
// TypeError when the pref "enable-well-formed-unicode-strings" is off.
//
// This test should be removed once the pref is turned on by default.
assertThrowsInstanceOf(() => "abc".isWellFormed(), TypeError)
assertThrowsInstanceOf(() => "abc".toWellFormed(), TypeError)
if (typeof reportCompare === "function")
reportCompare(0, 0);

Просмотреть файл

@ -777,9 +777,9 @@ static mozilla::Atomic<bool> sWeakRefsEnabled(false);
static mozilla::Atomic<bool> sWeakRefsExposeCleanupSome(false);
static mozilla::Atomic<bool> sIteratorHelpersEnabled(false);
static mozilla::Atomic<bool> sShadowRealmsEnabled(false);
static mozilla::Atomic<bool> sWellFormedUnicodeStringsEnabled(true);
#ifdef NIGHTLY_BUILD
static mozilla::Atomic<bool> sArrayGroupingEnabled(false);
static mozilla::Atomic<bool> sWellFormedUnicodeStringsEnabled(false);
static mozilla::Atomic<bool> sNewSetMethodsEnabled(false);
static mozilla::Atomic<bool> sArrayBufferTransferEnabled(false);
#endif
@ -806,9 +806,9 @@ void xpc::SetPrefableRealmOptions(JS::RealmOptions& options) {
.setWeakRefsEnabled(GetWeakRefsEnabled())
.setIteratorHelpersEnabled(sIteratorHelpersEnabled)
.setShadowRealmsEnabled(sShadowRealmsEnabled)
.setWellFormedUnicodeStringsEnabled(sWellFormedUnicodeStringsEnabled)
#ifdef NIGHTLY_BUILD
.setArrayGroupingEnabled(sArrayGroupingEnabled)
.setWellFormedUnicodeStringsEnabled(sWellFormedUnicodeStringsEnabled)
.setNewSetMethodsEnabled(sNewSetMethodsEnabled)
.setArrayBufferTransferEnabled(sArrayBufferTransferEnabled)
#endif
@ -1007,13 +1007,13 @@ static void ReloadPrefsCallback(const char* pref, void* aXpccx) {
JS_OPTIONS_DOT_STR "experimental.weakrefs.expose_cleanupSome");
sShadowRealmsEnabled =
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.shadow_realms");
sWellFormedUnicodeStringsEnabled =
Preferences::GetBool(JS_OPTIONS_DOT_STR "well_formed_unicode_strings");
#ifdef NIGHTLY_BUILD
sIteratorHelpersEnabled =
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.iterator_helpers");
sArrayGroupingEnabled =
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.array_grouping");
sWellFormedUnicodeStringsEnabled = Preferences::GetBool(
JS_OPTIONS_DOT_STR "experimental.well_formed_unicode_strings");
sNewSetMethodsEnabled =
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.new_set_methods");
sArrayBufferTransferEnabled = Preferences::GetBool(

Просмотреть файл

@ -7456,6 +7456,12 @@
value: false
mirror: always
# Support for String.prototype.{is,to}WellFormed in JavaScript.
- name: javascript.options.well_formed_unicode_strings
type: bool
value: true
mirror: always
#ifdef NIGHTLY_BUILD
# Experimental support for Iterator Helpers in JavaScript.
- name: javascript.options.experimental.iterator_helpers
@ -7469,12 +7475,6 @@
value: false
mirror: always
# Experimental support for String.prototype.{is,to}WellFormed in JavaScript.
- name: javascript.options.experimental.well_formed_unicode_strings
type: bool
value: false
mirror: always
# Experimental support for New Set methods
- name: javascript.options.experimental.new_set_methods
type: bool