Hi,

until Bug 1648010, there were some macros widely used for the handling of
string literals, i.e. NS_LITERAL_STRING, NS_LITERAL_CSTRING,
NS_NAMED_LITERAL_STRING, NS_NAMED_LITERAL_CSTRING. These macros have resp.
will have been removed once all patches for that bug landed.

The non-NAMED variants are now replaced by user-defined literals using the
_ns suffix:

- NS_LITERAL_CSTRING("foo") becomes "foo"_ns
- NS_LITERAL_STRING("bar") becomes u"bar"_ns

This makes the string literals somewhat more concise and more consistent
with normal literals.

Note that the "base" literal needs to use the correct underlying character
type (char vs. char16_t), which is why the same user-defined literal is
used for both cases.

For cases where a macro is used to construct a nsString-like literal,
either
- the definition of the macro can be changed to make use of the
user-defined literal already,
- the macro can be changed to a constexpr constant
- in cases where neither of these is possible or desirable, the (new) macro
NS_LITERAL_STRING_FROM_CSTRING can be used, which behaves just like
NS_LITERAL_STRING did, but has intentionally a somewhat more verbose name
to avoid its widespread use where it is not required

The NAMED variants have produced a non-standard syntax for declaring
variables that are subsequently referenced by user code. These are now
replaced by regular variable/constant declarations such as:

constexpr auto kNamedCLiteral = "foo"_ns;
constexpr auto kNamedLiteral = u"bar"_ns;

This is slightly longer than the use of the NAMED macros, but uses a
standard syntax.

Best wishes
Simon
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to