style: Make Rust static atoms able to be used in const contexts.

I see atom dropping code generated in release builds for stuff like dropping the
"class" atom here:

https://searchfox.org/mozilla-central/rev/4df8821c1b824db5f40f381f48432f219d99ae36/servo/components/style/gecko/wrapper.rs#592

That is silly, and I hope making Atom be able to be used in const context will
help the compiler see that yeah, we're not doing anything interesting and the
atom shouldn't get dropped.

It also allows us to get rid of a few lazy_static!s, so we should do it anyway.

In order to accomplish this, compute the offset into gGkAtoms manually instead
of going through the static_atoms() array and then back to the byte offset.

Differential Revision: https://phabricator.services.mozilla.com/D55039
This commit is contained in:
Emilio Cobos Álvarez 2019-11-27 23:24:22 +01:00
parent 001c511f9c
commit 31837a1efa
No known key found for this signature in database
GPG key ID: E1152D0994E4BF8A
3 changed files with 45 additions and 46 deletions

View file

@ -132,7 +132,7 @@ PRELUDE = '''
RULE_TEMPLATE = '''
("{atom}") => {{{{
#[allow(unsafe_code)] #[allow(unused_unsafe)]
unsafe {{ $crate::string_cache::Atom::from_index({index}) }}
unsafe {{ $crate::string_cache::Atom::from_index_unchecked({index}) }}
}}}};
'''[1:]