Bug 238977 - Finish porting code base to String::fromLatin1() and make String(const char*) private
Summary: Finish porting code base to String::fromLatin1() and make String(const char*)...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Web Template Framework (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Chris Dumez
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2022-04-07 20:06 PDT by Chris Dumez
Modified: 2022-04-11 08:42 PDT (History)
8 users (show)

See Also:


Attachments
WIP Patch (82.65 KB, patch)
2022-04-07 20:49 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
WIP Patch (83.24 KB, patch)
2022-04-07 21:00 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
WIP Patch (83.73 KB, patch)
2022-04-07 21:04 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
WIP Patch (86.55 KB, patch)
2022-04-07 21:17 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
WIP Patch (103.88 KB, patch)
2022-04-07 21:43 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
WIP Patch (104.89 KB, patch)
2022-04-07 22:01 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
WIP Patch (105.55 KB, patch)
2022-04-07 22:08 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
WIP Patch (106.24 KB, patch)
2022-04-07 22:13 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
WIP Patch (115.44 KB, patch)
2022-04-07 22:31 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (133.73 KB, patch)
2022-04-07 22:45 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (136.14 KB, patch)
2022-04-07 22:49 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (147.15 KB, patch)
2022-04-08 07:20 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (149.12 KB, patch)
2022-04-08 07:39 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (149.73 KB, patch)
2022-04-08 08:00 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (150.65 KB, patch)
2022-04-08 08:16 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (152.64 KB, patch)
2022-04-08 08:39 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (153.60 KB, patch)
2022-04-08 08:57 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (155.38 KB, patch)
2022-04-08 09:35 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (156.22 KB, patch)
2022-04-08 09:48 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (157.79 KB, patch)
2022-04-08 09:57 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (157.82 KB, patch)
2022-04-08 10:02 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (158.57 KB, patch)
2022-04-08 10:07 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (160.38 KB, patch)
2022-04-08 10:51 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (162.89 KB, patch)
2022-04-08 11:02 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (163.64 KB, patch)
2022-04-08 12:42 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (164.36 KB, patch)
2022-04-08 14:30 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (166.71 KB, patch)
2022-04-08 16:51 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (170.71 KB, patch)
2022-04-08 18:04 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (172.14 KB, patch)
2022-04-08 19:22 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (178.05 KB, patch)
2022-04-08 20:06 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (183.92 KB, patch)
2022-04-08 20:45 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (184.48 KB, patch)
2022-04-08 21:51 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (185.50 KB, patch)
2022-04-08 22:17 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (186.14 KB, patch)
2022-04-08 22:40 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (186.72 KB, patch)
2022-04-08 22:56 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (187.49 KB, patch)
2022-04-08 23:04 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (202.24 KB, patch)
2022-04-08 23:16 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (203.39 KB, patch)
2022-04-08 23:26 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (204.04 KB, patch)
2022-04-08 23:32 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (208.99 KB, patch)
2022-04-09 09:42 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (209.61 KB, patch)
2022-04-09 10:40 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (214.61 KB, patch)
2022-04-09 11:41 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (216.31 KB, patch)
2022-04-09 14:22 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (217.67 KB, patch)
2022-04-09 15:33 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (217.67 KB, patch)
2022-04-09 18:13 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff
Patch (218.70 KB, patch)
2022-04-09 20:05 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (219.63 KB, patch)
2022-04-09 22:34 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (220.30 KB, patch)
2022-04-10 13:01 PDT, Chris Dumez
no flags Details | Formatted Diff | Diff
Patch (221.51 KB, patch)
2022-04-10 16:26 PDT, Chris Dumez
ews-feeder: commit-queue-
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Chris Dumez 2022-04-07 20:06:14 PDT
Finish porting code base to String::fromLatin1() and make String(const char*) private.
Comment 1 Chris Dumez 2022-04-07 20:49:55 PDT
Created attachment 457008 [details]
WIP Patch
Comment 2 Chris Dumez 2022-04-07 21:00:37 PDT
Created attachment 457009 [details]
WIP Patch
Comment 3 Chris Dumez 2022-04-07 21:04:12 PDT
Created attachment 457010 [details]
WIP Patch
Comment 4 Chris Dumez 2022-04-07 21:17:55 PDT
Created attachment 457014 [details]
WIP Patch
Comment 5 Chris Dumez 2022-04-07 21:43:04 PDT
Created attachment 457015 [details]
WIP Patch
Comment 6 Chris Dumez 2022-04-07 22:01:47 PDT
Created attachment 457017 [details]
WIP Patch
Comment 7 Chris Dumez 2022-04-07 22:08:16 PDT
Created attachment 457018 [details]
WIP Patch
Comment 8 Chris Dumez 2022-04-07 22:13:16 PDT
Created attachment 457019 [details]
WIP Patch
Comment 9 Chris Dumez 2022-04-07 22:31:23 PDT
Created attachment 457021 [details]
WIP Patch
Comment 10 Chris Dumez 2022-04-07 22:45:31 PDT
Created attachment 457022 [details]
Patch
Comment 11 Chris Dumez 2022-04-07 22:49:58 PDT
Created attachment 457023 [details]
Patch
Comment 12 Chris Dumez 2022-04-08 07:20:35 PDT
Created attachment 457062 [details]
Patch
Comment 13 Chris Dumez 2022-04-08 07:39:57 PDT
Created attachment 457066 [details]
Patch
Comment 14 Chris Dumez 2022-04-08 08:00:11 PDT
Created attachment 457070 [details]
Patch
Comment 15 Chris Dumez 2022-04-08 08:16:33 PDT
Created attachment 457073 [details]
Patch
Comment 16 Chris Dumez 2022-04-08 08:39:08 PDT
Created attachment 457075 [details]
Patch
Comment 17 Chris Dumez 2022-04-08 08:57:09 PDT
Created attachment 457079 [details]
Patch
Comment 18 Chris Dumez 2022-04-08 09:35:33 PDT
Created attachment 457086 [details]
Patch
Comment 19 Chris Dumez 2022-04-08 09:48:53 PDT
Created attachment 457087 [details]
Patch
Comment 20 Chris Dumez 2022-04-08 09:57:09 PDT
Created attachment 457088 [details]
Patch
Comment 21 Chris Dumez 2022-04-08 10:02:27 PDT
Created attachment 457089 [details]
Patch
Comment 22 Chris Dumez 2022-04-08 10:07:55 PDT
Created attachment 457090 [details]
Patch
Comment 23 Chris Dumez 2022-04-08 10:51:46 PDT
Created attachment 457093 [details]
Patch
Comment 24 Chris Dumez 2022-04-08 11:02:15 PDT
Created attachment 457097 [details]
Patch
Comment 25 Chris Dumez 2022-04-08 12:42:11 PDT
Created attachment 457111 [details]
Patch
Comment 26 Chris Dumez 2022-04-08 14:30:47 PDT
Created attachment 457118 [details]
Patch
Comment 27 Chris Dumez 2022-04-08 16:51:36 PDT
Created attachment 457128 [details]
Patch
Comment 28 Chris Dumez 2022-04-08 18:04:53 PDT
Created attachment 457132 [details]
Patch
Comment 29 Chris Dumez 2022-04-08 19:22:15 PDT
Created attachment 457135 [details]
Patch
Comment 30 Chris Dumez 2022-04-08 20:06:10 PDT
Created attachment 457137 [details]
Patch
Comment 31 Chris Dumez 2022-04-08 20:45:14 PDT
Created attachment 457142 [details]
Patch
Comment 32 Chris Dumez 2022-04-08 21:51:59 PDT
Created attachment 457144 [details]
Patch
Comment 33 Chris Dumez 2022-04-08 22:17:41 PDT
Created attachment 457145 [details]
Patch
Comment 34 Chris Dumez 2022-04-08 22:40:16 PDT
Created attachment 457148 [details]
Patch
Comment 35 Chris Dumez 2022-04-08 22:56:45 PDT
Created attachment 457150 [details]
Patch
Comment 36 Chris Dumez 2022-04-08 23:04:01 PDT
Created attachment 457152 [details]
Patch
Comment 37 Chris Dumez 2022-04-08 23:16:28 PDT
Created attachment 457153 [details]
Patch
Comment 38 Chris Dumez 2022-04-08 23:26:50 PDT
Created attachment 457154 [details]
Patch
Comment 39 Chris Dumez 2022-04-08 23:32:40 PDT
Created attachment 457155 [details]
Patch
Comment 40 Chris Dumez 2022-04-09 09:42:33 PDT
Created attachment 457168 [details]
Patch
Comment 41 Chris Dumez 2022-04-09 10:40:55 PDT
Created attachment 457171 [details]
Patch
Comment 42 Chris Dumez 2022-04-09 11:41:23 PDT
Created attachment 457174 [details]
Patch
Comment 43 Chris Dumez 2022-04-09 14:22:07 PDT
Created attachment 457182 [details]
Patch
Comment 44 Chris Dumez 2022-04-09 15:33:01 PDT
Created attachment 457183 [details]
Patch
Comment 45 Chris Dumez 2022-04-09 18:13:32 PDT
Created attachment 457185 [details]
Patch
Comment 46 Chris Dumez 2022-04-09 20:05:10 PDT
Created attachment 457186 [details]
Patch
Comment 47 Chris Dumez 2022-04-09 22:34:53 PDT
Created attachment 457191 [details]
Patch
Comment 48 Chris Dumez 2022-04-10 13:01:23 PDT
Created attachment 457209 [details]
Patch
Comment 49 Darin Adler 2022-04-10 15:37:28 PDT
Comment on attachment 457209 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=457209&action=review

> Source/WTF/wtf/text/ASCIILiteral.h:73
> +        return !a;

This should be:

    return false;

I don’t like checking !a again, when the line just above has already checked it. Or write this:

    if (!a || !b)
        return a == b;

I kind of like that one.

> Source/WTF/wtf/text/ASCIILiteral.h:83
> +    if (!a)
> +        return !b;
> +    if (!b)
> +        return !a;
>      return !strcmp(a.characters(), b.characters());

Same applies here. Or we could take advantage of the function above and just write:

    return a == b.characters();

> Source/WTF/wtf/text/WTFString.h:81
>      WTF_EXPORT_PRIVATE String(const LChar* characters, unsigned length);
>      WTF_EXPORT_PRIVATE String(const char* characters, unsigned length);

I think that later these should be named String::fromLatin1 too.

> Source/WTF/wtf/text/WTFString.h:82
>      ALWAYS_INLINE static String fromLatin1(const char* characters) { return String { characters }; }

I still like the idea of adding a fromASCII, but I am not pushing you to do that at this time.

> Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:88
> +    init.protocol = String::fromUTF8(protocol.get());

Using fromUTF8 adds in the possibility of failure and the need to check for null, perhaps.

Maybe some day we will want to rename fromUTF8 to have the word "try" in its name.

> Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp:159
> +    parameters.rid = String::fromUTF8(gst_structure_get_string(rtcParameters, "rid"));

Ditto, this now has a new possible failure.

> Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1908
> -        String str = "WebGL: checkFramebufferStatus:" + String(reason);
> +        String str = makeString("WebGL: checkFramebufferStatus: ", reason);
>          printToConsole(MessageLevel::Warning, str);

We should not bother with the local variable here.

> Source/WebCore/loader/soup/ResourceLoaderSoup.cpp:68
> +        auto contentTypeString = String::fromLatin1(contentType.get());
>          ResourceResponse response { url, extractMIMETypeFromMediaType(contentTypeString), static_cast<long long>(dataSize), extractCharsetFromMediaType(contentTypeString).toString() };

Doesn’t extractMIMETypeFromMediaType take a StringView?

> Source/WebCore/platform/graphics/GLContext.cpp:179
> +        auto versionString = String::fromLatin1(reinterpret_cast<const char*>(::glGetString(GL_VERSION)));

This should be changed to use StringView some day. No reason to allocate all these strings just to parse/split something.

> Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp:179
> +            auto metadata = String::fromLatin1(gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_KLASS));

This should be changed to use StringView some day. No reason to allocate a string just to parse/split something.

> Source/WebDriver/WebDriverService.cpp:569
> +        completionHandler(CommandResult::fail(CommandResult::ErrorCode::InvalidSessionID, String("session deleted because of page crash or hang."_s)));

I bet most of these String() in this file aren’t needed.

> Tools/DumpRenderTree/win/DumpRenderTree.cpp:1177
>          // DumpRenderTree does not support checking for abandonded documents.

Spelling error in abandoned here.

> Tools/DumpRenderTree/win/DumpRenderTree.cpp:1178
> +        CString result("\n");

So strange to use any string at all for this code. Could just have this instead:

    fputs("Content-Type: text/plain\nContent-Length: 1\n\n#EOF\n", stdout);
    fputs("#EOF\n", stderr);
    fflush(stdout);
    fflush(stderr);

But really not sure if we want to improve this.

> Tools/TestWebKitAPI/Tests/WebCore/PublicSuffix.cpp:182
> +    EXPECT_EQ(String::fromLatin1("åäö"), topPrivatelyControlledDomain("åäö"_s));
> +    EXPECT_EQ(String::fromLatin1("ÅÄÖ"), topPrivatelyControlledDomain("ÅÄÖ"_s));

This already was not OK. We should not have any non-ASCII characters in an ASCIILiteral. In fact, we should be checking that at compile time. If we did, this would fail to compile.

> Tools/TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:285
> +                        auto key = signingParty == TokenSigningParty::Source ? String("source_unlinkable_token"_s) : String("destination_unlinkable_token"_s);

Should be able to take all the String() out here.

> Tools/TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:323
> +                                        auto key = signingParty == TokenSigningParty::Source ? String("source_secret_token"_s) : String("destination_secret_token"_s);

And here.

> Tools/TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:331
> +                                        key = signingParty == TokenSigningParty::Source ? String("source_secret_token_signature"_s) : String("destination_secret_token_signature"_s);

And here.

> Tools/TestWebKitAPI/Tests/mac/ContextMenuCanCopyURL.mm:104
> +    EXPECT_EQ(String("http://www.webkit.org/"_s), String([url absoluteString]));

Don’t need a String() around the ASCIILiteral, I don’t think.

> Tools/TestWebKitAPI/Tests/mac/WebViewCanPasteURL.mm:49
> +    EXPECT_EQ(String("http://www.webkit.org/"_s), String(text));

Ditto.

> Tools/TestWebKitAPI/Tests/mac/WillPerformClientRedirectToURLCrash.mm:67
> +    EXPECT_EQ(String("PASS"_s), String(message));

Ditto.
Comment 50 Chris Dumez 2022-04-10 16:02:02 PDT
Comment on attachment 457209 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=457209&action=review

>> Source/WTF/wtf/text/ASCIILiteral.h:73
>> +        return !a;
> 
> This should be:
> 
>     return false;
> 
> I don’t like checking !a again, when the line just above has already checked it. Or write this:
> 
>     if (!a || !b)
>         return a == b;
> 
> I kind of like that one.

Ok, will change. I think I'll have to use this though:
if (!a || !b)
    return a.characters() == b;

FYI, I had copied the logic from String's operator==.

>> Source/WTF/wtf/text/WTFString.h:81
>>      WTF_EXPORT_PRIVATE String(const char* characters, unsigned length);
> 
> I think that later these should be named String::fromLatin1 too.

I agree.

>> Source/WTF/wtf/text/WTFString.h:82
>>      ALWAYS_INLINE static String fromLatin1(const char* characters) { return String { characters }; }
> 
> I still like the idea of adding a fromASCII, but I am not pushing you to do that at this time.

I don't fully understand the benefit of the fromASCII(). Sure, we can artificially enforce via assertions that the input is ASCII but it won't really help us write a more efficient constructor, will it?
If so, is it really worth adding yet another way to construct a String?

>> Source/WebCore/loader/soup/ResourceLoaderSoup.cpp:68
>>          ResourceResponse response { url, extractMIMETypeFromMediaType(contentTypeString), static_cast<long long>(dataSize), extractCharsetFromMediaType(contentTypeString).toString() };
> 
> Doesn’t extractMIMETypeFromMediaType take a StringView?

No, not at the moment. It could but it seems there is a potential optimization where it returned the String passed in, as-is.

>> Tools/TestWebKitAPI/Tests/WebCore/PublicSuffix.cpp:182
>> +    EXPECT_EQ(String::fromLatin1("ÅÄÖ"), topPrivatelyControlledDomain("ÅÄÖ"_s));
> 
> This already was not OK. We should not have any non-ASCII characters in an ASCIILiteral. In fact, we should be checking that at compile time. If we did, this would fail to compile.

Weird, we do have assertions in place already:
```
constexpr ASCIILiteral operator"" _s(const char* characters, size_t n)
{
#if ASSERT_ENABLED
    for (size_t i = 0; i < n; ++i)
        ASSERT_UNDER_CONSTEXPR_CONTEXT(isASCII(characters[i]));
#else
    UNUSED_PARAM(n);
#endif
    return ASCIILiteral::fromLiteralUnsafe(characters);
}
```
Comment 51 Chris Dumez 2022-04-10 16:19:10 PDT
(In reply to Chris Dumez from comment #50)
> Comment on attachment 457209 [details]
> Patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=457209&action=review
> 
> >> Source/WTF/wtf/text/ASCIILiteral.h:73
> >> +        return !a;
> > 
> > This should be:
> > 
> >     return false;
> > 
> > I don’t like checking !a again, when the line just above has already checked it. Or write this:
> > 
> >     if (!a || !b)
> >         return a == b;
> > 
> > I kind of like that one.
> 
> Ok, will change. I think I'll have to use this though:
> if (!a || !b)
>     return a.characters() == b;
> 
> FYI, I had copied the logic from String's operator==.
> 
> >> Source/WTF/wtf/text/WTFString.h:81
> >>      WTF_EXPORT_PRIVATE String(const char* characters, unsigned length);
> > 
> > I think that later these should be named String::fromLatin1 too.
> 
> I agree.
> 
> >> Source/WTF/wtf/text/WTFString.h:82
> >>      ALWAYS_INLINE static String fromLatin1(const char* characters) { return String { characters }; }
> > 
> > I still like the idea of adding a fromASCII, but I am not pushing you to do that at this time.
> 
> I don't fully understand the benefit of the fromASCII(). Sure, we can
> artificially enforce via assertions that the input is ASCII but it won't
> really help us write a more efficient constructor, will it?
> If so, is it really worth adding yet another way to construct a String?
> 
> >> Source/WebCore/loader/soup/ResourceLoaderSoup.cpp:68
> >>          ResourceResponse response { url, extractMIMETypeFromMediaType(contentTypeString), static_cast<long long>(dataSize), extractCharsetFromMediaType(contentTypeString).toString() };
> > 
> > Doesn’t extractMIMETypeFromMediaType take a StringView?
> 
> No, not at the moment. It could but it seems there is a potential
> optimization where it returned the String passed in, as-is.
> 
> >> Tools/TestWebKitAPI/Tests/WebCore/PublicSuffix.cpp:182
> >> +    EXPECT_EQ(String::fromLatin1("ÅÄÖ"), topPrivatelyControlledDomain("ÅÄÖ"_s));
> > 
> > This already was not OK. We should not have any non-ASCII characters in an ASCIILiteral. In fact, we should be checking that at compile time. If we did, this would fail to compile.
> 
> Weird, we do have assertions in place already:
> ```
> constexpr ASCIILiteral operator"" _s(const char* characters, size_t n)
> {
> #if ASSERT_ENABLED
>     for (size_t i = 0; i < n; ++i)
>         ASSERT_UNDER_CONSTEXPR_CONTEXT(isASCII(characters[i]));
> #else
>     UNUSED_PARAM(n);
> #endif
>     return ASCIILiteral::fromLiteralUnsafe(characters);
> }
> ```

Oh, the assertion does hit:
ASSERTION FAILED: isASCII(characters[i])
/Volumes/Data/WebKit/OpenSource/WebKitBuild/Debug/usr/local/include/wtf/text/ASCIILiteral.h(88) : WTF::ASCIILiteral WTF::StringLiterals::operator""_s(const char *, size_t)
worker/0 TestWebKitAPI.PublicSuffix.TopPrivatelyControlledDomain Crashed
Ran 1 tests of 1 with 0 successful
------------------------------
Test suite failed

Crashed

    TestWebKitAPI.PublicSuffix.TopPrivatelyControlledDomain
        ASSERTION FAILED: isASCII(characters[i])
        /Volumes/Data/WebKit/OpenSource/WebKitBuild/Debug/usr/local/include/wtf/text/ASCIILiteral.h(88) : WTF::ASCIILiteral WTF::StringLiterals::operator""_s(const char *, size_t)
Comment 52 Chris Dumez 2022-04-10 16:26:32 PDT
Created attachment 457216 [details]
Patch
Comment 53 Chris Dumez 2022-04-10 21:40:22 PDT
Comment on attachment 457216 [details]
Patch

Clearing flags on attachment: 457216

Committed r292696 (?): <https://commits.webkit.org/r292696>
Comment 54 Chris Dumez 2022-04-10 21:40:25 PDT
All reviewed patches have been landed.  Closing bug.
Comment 55 Radar WebKit Bug Importer 2022-04-10 21:47:57 PDT
<rdar://problem/91546913>
Comment 56 EWS 2022-04-10 22:32:28 PDT
Found 2 new test failures: fast/multicol/client-rects-spanners.html, fast/multicol/span/span-as-immediate-child-generated-content.html
Comment 57 Darin Adler 2022-04-11 08:42:21 PDT
Comment on attachment 457209 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=457209&action=review

>>> Source/WTF/wtf/text/WTFString.h:82
>>>      ALWAYS_INLINE static String fromLatin1(const char* characters) { return String { characters }; }
>> 
>> I still like the idea of adding a fromASCII, but I am not pushing you to do that at this time.
> 
> I don't fully understand the benefit of the fromASCII(). Sure, we can artificially enforce via assertions that the input is ASCII but it won't really help us write a more efficient constructor, will it?
> If so, is it really worth adding yet another way to construct a String?

Not critical. Maybe we should discuss this in person at some point. I still like the idea and I think it is valuable for two reasons, but I don’t want to write more paragraphs about why. The two reasons are: (1) being explicit about what we intend at each call site, instead of writing fromLatin1 because it "just doesn’t matter it’s always ASCII", and (2) future-proofing these call sites a little if we want to do experiments with storing UTF-8.