Skip to content

Commit

Permalink
Bug 1850755 - Part 1: Turn on well-formed-unicode-strings by default …
Browse files Browse the repository at this point in the history
…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,
tc39/ecma262#3039

Differential Revision: https://phabricator.services.mozilla.com/D187182
  • Loading branch information
allstarschh committed Sep 8, 2023
1 parent 10c80b9 commit e1dd394
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 41 deletions.
18 changes: 9 additions & 9 deletions js/public/RealmOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -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_;
}
Expand All @@ -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;
Expand Down Expand Up @@ -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.
Expand Down
5 changes: 0 additions & 5 deletions js/src/builtin/String.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}
Expand Down
16 changes: 8 additions & 8 deletions js/src/shell/js.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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
Expand Down
9 changes: 0 additions & 9 deletions js/src/tests/non262/String/wellFormed.js

This file was deleted.

8 changes: 4 additions & 4 deletions js/xpconnect/src/XPCJSContext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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(
Expand Down
12 changes: 6 additions & 6 deletions modules/libpref/init/StaticPrefList.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit e1dd394

Please sign in to comment.