forked from mirrors/gecko-dev
Bug 1850755 - 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:
parent
8b4cb0000b
commit
fa82b83de2
6 changed files with 27 additions and 41 deletions
|
|
@ -204,13 +204,6 @@ class JS_PUBLIC_API RealmCreationOptions {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NIGHTLY_BUILD
|
|
||||||
bool getArrayGroupingEnabled() const { return arrayGrouping_; }
|
|
||||||
RealmCreationOptions& setArrayGroupingEnabled(bool flag) {
|
|
||||||
arrayGrouping_ = flag;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool getWellFormedUnicodeStringsEnabled() const {
|
bool getWellFormedUnicodeStringsEnabled() const {
|
||||||
return wellFormedUnicodeStrings_;
|
return wellFormedUnicodeStrings_;
|
||||||
}
|
}
|
||||||
|
|
@ -219,6 +212,13 @@ class JS_PUBLIC_API RealmCreationOptions {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef NIGHTLY_BUILD
|
||||||
|
bool getArrayGroupingEnabled() const { return arrayGrouping_; }
|
||||||
|
RealmCreationOptions& setArrayGroupingEnabled(bool flag) {
|
||||||
|
arrayGrouping_ = flag;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
bool getNewSetMethodsEnabled() const { return newSetMethods_; }
|
bool getNewSetMethodsEnabled() const { return newSetMethods_; }
|
||||||
RealmCreationOptions& setNewSetMethodsEnabled(bool flag) {
|
RealmCreationOptions& setNewSetMethodsEnabled(bool flag) {
|
||||||
newSetMethods_ = flag;
|
newSetMethods_ = flag;
|
||||||
|
|
@ -292,10 +292,10 @@ class JS_PUBLIC_API RealmCreationOptions {
|
||||||
bool propertyErrorMessageFix_ = false;
|
bool propertyErrorMessageFix_ = false;
|
||||||
bool iteratorHelpers_ = false;
|
bool iteratorHelpers_ = false;
|
||||||
bool shadowRealms_ = false;
|
bool shadowRealms_ = false;
|
||||||
|
// Pref for String.prototype.{is,to}WellFormed() methods.
|
||||||
|
bool wellFormedUnicodeStrings_ = true;
|
||||||
#ifdef NIGHTLY_BUILD
|
#ifdef NIGHTLY_BUILD
|
||||||
bool arrayGrouping_ = false;
|
bool arrayGrouping_ = false;
|
||||||
// Pref for String.prototype.{is,to}WellFormed() methods.
|
|
||||||
bool wellFormedUnicodeStrings_ = false;
|
|
||||||
// Pref for new Set.prototype methods.
|
// Pref for new Set.prototype methods.
|
||||||
bool newSetMethods_ = false;
|
bool newSetMethods_ = false;
|
||||||
// Pref for ArrayBuffer.prototype.transfer{,ToFixedLength}() methods.
|
// 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
|
#endif // JS_HAS_INTL_API
|
||||||
|
|
||||||
#ifdef NIGHTLY_BUILD
|
|
||||||
/**
|
/**
|
||||||
* IsStringWellFormedUnicode ( string )
|
* IsStringWellFormedUnicode ( string )
|
||||||
* https://tc39.es/ecma262/#sec-isstringwellformedunicode
|
* https://tc39.es/ecma262/#sec-isstringwellformedunicode
|
||||||
|
|
@ -1693,8 +1692,6 @@ static const JSFunctionSpec wellFormed_functions[] = {
|
||||||
JS_FN("isWellFormed", str_isWellFormed, 0, 0),
|
JS_FN("isWellFormed", str_isWellFormed, 0, 0),
|
||||||
JS_FN("toWellFormed", str_toWellFormed, 0, 0), JS_FS_END};
|
JS_FN("toWellFormed", str_toWellFormed, 0, 0), JS_FS_END};
|
||||||
|
|
||||||
#endif // NIGHTLY_BUILD
|
|
||||||
|
|
||||||
static bool str_charAt(JSContext* cx, unsigned argc, Value* vp) {
|
static bool str_charAt(JSContext* cx, unsigned argc, Value* vp) {
|
||||||
AutoJSMethodProfilerEntry pseudoFrame(cx, "String.prototype", "charAt");
|
AutoJSMethodProfilerEntry pseudoFrame(cx, "String.prototype", "charAt");
|
||||||
CallArgs args = CallArgsFromVp(argc, vp);
|
CallArgs args = CallArgsFromVp(argc, vp);
|
||||||
|
|
@ -4040,13 +4037,11 @@ static bool StringClassFinish(JSContext* cx, HandleObject ctor,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NIGHTLY_BUILD
|
|
||||||
// Define isWellFormed/toWellFormed functions.
|
// Define isWellFormed/toWellFormed functions.
|
||||||
if (cx->realm()->creationOptions().getWellFormedUnicodeStringsEnabled() &&
|
if (cx->realm()->creationOptions().getWellFormedUnicodeStringsEnabled() &&
|
||||||
!JS_DefineFunctions(cx, nativeProto, wellFormed_functions)) {
|
!JS_DefineFunctions(cx, nativeProto, wellFormed_functions)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -741,10 +741,10 @@ bool shell::enableToSource = false;
|
||||||
bool shell::enablePropertyErrorMessageFix = false;
|
bool shell::enablePropertyErrorMessageFix = false;
|
||||||
bool shell::enableIteratorHelpers = false;
|
bool shell::enableIteratorHelpers = false;
|
||||||
bool shell::enableShadowRealms = false;
|
bool shell::enableShadowRealms = false;
|
||||||
|
// Pref for String.prototype.{is,to}WellFormed() methods.
|
||||||
|
bool shell::enableWellFormedUnicodeStrings = true;
|
||||||
#ifdef NIGHTLY_BUILD
|
#ifdef NIGHTLY_BUILD
|
||||||
bool shell::enableArrayGrouping = false;
|
bool shell::enableArrayGrouping = false;
|
||||||
// Pref for String.prototype.{is,to}WellFormed() methods.
|
|
||||||
bool shell::enableWellFormedUnicodeStrings = false;
|
|
||||||
// Pref for new Set.prototype methods.
|
// Pref for new Set.prototype methods.
|
||||||
bool shell::enableNewSetMethods = false;
|
bool shell::enableNewSetMethods = false;
|
||||||
// Pref for ArrayBuffer.prototype.transfer{,ToFixedLength}() methods.
|
// Pref for ArrayBuffer.prototype.transfer{,ToFixedLength}() methods.
|
||||||
|
|
@ -4135,9 +4135,9 @@ static void SetStandardRealmOptions(JS::RealmOptions& options) {
|
||||||
.setPropertyErrorMessageFixEnabled(enablePropertyErrorMessageFix)
|
.setPropertyErrorMessageFixEnabled(enablePropertyErrorMessageFix)
|
||||||
.setIteratorHelpersEnabled(enableIteratorHelpers)
|
.setIteratorHelpersEnabled(enableIteratorHelpers)
|
||||||
.setShadowRealmsEnabled(enableShadowRealms)
|
.setShadowRealmsEnabled(enableShadowRealms)
|
||||||
|
.setWellFormedUnicodeStringsEnabled(enableWellFormedUnicodeStrings)
|
||||||
#ifdef NIGHTLY_BUILD
|
#ifdef NIGHTLY_BUILD
|
||||||
.setArrayGroupingEnabled(enableArrayGrouping)
|
.setArrayGroupingEnabled(enableArrayGrouping)
|
||||||
.setWellFormedUnicodeStringsEnabled(enableWellFormedUnicodeStrings)
|
|
||||||
.setNewSetMethodsEnabled(enableNewSetMethods)
|
.setNewSetMethodsEnabled(enableNewSetMethods)
|
||||||
.setArrayBufferTransferEnabled(enableArrayBufferTransfer)
|
.setArrayBufferTransferEnabled(enableArrayBufferTransfer)
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -11640,9 +11640,9 @@ bool InitOptionParser(OptionParser& op) {
|
||||||
!op.addBoolOption('\0', "enable-shadow-realms", "Enable ShadowRealms") ||
|
!op.addBoolOption('\0', "enable-shadow-realms", "Enable ShadowRealms") ||
|
||||||
!op.addBoolOption('\0', "enable-array-grouping",
|
!op.addBoolOption('\0', "enable-array-grouping",
|
||||||
"Enable Array.grouping") ||
|
"Enable Array.grouping") ||
|
||||||
!op.addBoolOption('\0', "enable-well-formed-unicode-strings",
|
!op.addBoolOption('\0', "disable-well-formed-unicode-strings",
|
||||||
"Enable String.prototype.{is,to}WellFormed() methods"
|
"Disable String.prototype.{is,to}WellFormed() methods"
|
||||||
"(Well-Formed Unicode Strings)") ||
|
"(Well-Formed Unicode Strings) (default: Enabled)") ||
|
||||||
!op.addBoolOption('\0', "enable-new-set-methods",
|
!op.addBoolOption('\0', "enable-new-set-methods",
|
||||||
"Enable New Set methods") ||
|
"Enable New Set methods") ||
|
||||||
!op.addBoolOption('\0', "enable-arraybuffer-transfer",
|
!op.addBoolOption('\0', "enable-arraybuffer-transfer",
|
||||||
|
|
@ -12152,10 +12152,10 @@ bool SetContextOptions(JSContext* cx, const OptionParser& op) {
|
||||||
!op.getBoolOption("disable-property-error-message-fix");
|
!op.getBoolOption("disable-property-error-message-fix");
|
||||||
enableIteratorHelpers = op.getBoolOption("enable-iterator-helpers");
|
enableIteratorHelpers = op.getBoolOption("enable-iterator-helpers");
|
||||||
enableShadowRealms = op.getBoolOption("enable-shadow-realms");
|
enableShadowRealms = op.getBoolOption("enable-shadow-realms");
|
||||||
|
enableWellFormedUnicodeStrings =
|
||||||
|
!op.getBoolOption("disable-well-formed-unicode-strings");
|
||||||
#ifdef NIGHTLY_BUILD
|
#ifdef NIGHTLY_BUILD
|
||||||
enableArrayGrouping = op.getBoolOption("enable-array-grouping");
|
enableArrayGrouping = op.getBoolOption("enable-array-grouping");
|
||||||
enableWellFormedUnicodeStrings =
|
|
||||||
op.getBoolOption("enable-well-formed-unicode-strings");
|
|
||||||
enableNewSetMethods = op.getBoolOption("enable-new-set-methods");
|
enableNewSetMethods = op.getBoolOption("enable-new-set-methods");
|
||||||
enableArrayBufferTransfer = op.getBoolOption("enable-arraybuffer-transfer");
|
enableArrayBufferTransfer = op.getBoolOption("enable-arraybuffer-transfer");
|
||||||
#endif
|
#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> sWeakRefsExposeCleanupSome(false);
|
||||||
static mozilla::Atomic<bool> sIteratorHelpersEnabled(false);
|
static mozilla::Atomic<bool> sIteratorHelpersEnabled(false);
|
||||||
static mozilla::Atomic<bool> sShadowRealmsEnabled(false);
|
static mozilla::Atomic<bool> sShadowRealmsEnabled(false);
|
||||||
|
static mozilla::Atomic<bool> sWellFormedUnicodeStringsEnabled(true);
|
||||||
#ifdef NIGHTLY_BUILD
|
#ifdef NIGHTLY_BUILD
|
||||||
static mozilla::Atomic<bool> sArrayGroupingEnabled(false);
|
static mozilla::Atomic<bool> sArrayGroupingEnabled(false);
|
||||||
static mozilla::Atomic<bool> sWellFormedUnicodeStringsEnabled(false);
|
|
||||||
static mozilla::Atomic<bool> sNewSetMethodsEnabled(false);
|
static mozilla::Atomic<bool> sNewSetMethodsEnabled(false);
|
||||||
static mozilla::Atomic<bool> sArrayBufferTransferEnabled(false);
|
static mozilla::Atomic<bool> sArrayBufferTransferEnabled(false);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -806,9 +806,9 @@ void xpc::SetPrefableRealmOptions(JS::RealmOptions& options) {
|
||||||
.setWeakRefsEnabled(GetWeakRefsEnabled())
|
.setWeakRefsEnabled(GetWeakRefsEnabled())
|
||||||
.setIteratorHelpersEnabled(sIteratorHelpersEnabled)
|
.setIteratorHelpersEnabled(sIteratorHelpersEnabled)
|
||||||
.setShadowRealmsEnabled(sShadowRealmsEnabled)
|
.setShadowRealmsEnabled(sShadowRealmsEnabled)
|
||||||
|
.setWellFormedUnicodeStringsEnabled(sWellFormedUnicodeStringsEnabled)
|
||||||
#ifdef NIGHTLY_BUILD
|
#ifdef NIGHTLY_BUILD
|
||||||
.setArrayGroupingEnabled(sArrayGroupingEnabled)
|
.setArrayGroupingEnabled(sArrayGroupingEnabled)
|
||||||
.setWellFormedUnicodeStringsEnabled(sWellFormedUnicodeStringsEnabled)
|
|
||||||
.setNewSetMethodsEnabled(sNewSetMethodsEnabled)
|
.setNewSetMethodsEnabled(sNewSetMethodsEnabled)
|
||||||
.setArrayBufferTransferEnabled(sArrayBufferTransferEnabled)
|
.setArrayBufferTransferEnabled(sArrayBufferTransferEnabled)
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1007,13 +1007,13 @@ static void ReloadPrefsCallback(const char* pref, void* aXpccx) {
|
||||||
JS_OPTIONS_DOT_STR "experimental.weakrefs.expose_cleanupSome");
|
JS_OPTIONS_DOT_STR "experimental.weakrefs.expose_cleanupSome");
|
||||||
sShadowRealmsEnabled =
|
sShadowRealmsEnabled =
|
||||||
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.shadow_realms");
|
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.shadow_realms");
|
||||||
|
sWellFormedUnicodeStringsEnabled = Preferences::GetBool(
|
||||||
|
JS_OPTIONS_DOT_STR "well_formed_unicode_strings");
|
||||||
#ifdef NIGHTLY_BUILD
|
#ifdef NIGHTLY_BUILD
|
||||||
sIteratorHelpersEnabled =
|
sIteratorHelpersEnabled =
|
||||||
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.iterator_helpers");
|
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.iterator_helpers");
|
||||||
sArrayGroupingEnabled =
|
sArrayGroupingEnabled =
|
||||||
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.array_grouping");
|
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.array_grouping");
|
||||||
sWellFormedUnicodeStringsEnabled = Preferences::GetBool(
|
|
||||||
JS_OPTIONS_DOT_STR "experimental.well_formed_unicode_strings");
|
|
||||||
sNewSetMethodsEnabled =
|
sNewSetMethodsEnabled =
|
||||||
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.new_set_methods");
|
Preferences::GetBool(JS_OPTIONS_DOT_STR "experimental.new_set_methods");
|
||||||
sArrayBufferTransferEnabled = Preferences::GetBool(
|
sArrayBufferTransferEnabled = Preferences::GetBool(
|
||||||
|
|
|
||||||
|
|
@ -7456,6 +7456,12 @@
|
||||||
value: false
|
value: false
|
||||||
mirror: always
|
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
|
#ifdef NIGHTLY_BUILD
|
||||||
# Experimental support for Iterator Helpers in JavaScript.
|
# Experimental support for Iterator Helpers in JavaScript.
|
||||||
- name: javascript.options.experimental.iterator_helpers
|
- name: javascript.options.experimental.iterator_helpers
|
||||||
|
|
@ -7469,12 +7475,6 @@
|
||||||
value: false
|
value: false
|
||||||
mirror: always
|
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
|
# Experimental support for New Set methods
|
||||||
- name: javascript.options.experimental.new_set_methods
|
- name: javascript.options.experimental.new_set_methods
|
||||||
type: bool
|
type: bool
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue