mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Fix AttrHelpersForLayout
We should never be returning 'static stuff from attrs, that's a big lie.
This commit is contained in:
parent
4a17950331
commit
05c71dff88
1 changed files with 11 additions and 12 deletions
|
@ -233,28 +233,27 @@ impl Attr {
|
|||
}
|
||||
|
||||
#[allow(unsafe_code)]
|
||||
pub trait AttrHelpersForLayout {
|
||||
unsafe fn value_forever(&self) -> &'static AttrValue;
|
||||
unsafe fn value_ref_forever(&self) -> &'static str;
|
||||
unsafe fn value_tokens_forever(&self) -> Option<&'static [Atom]>;
|
||||
unsafe fn local_name_atom_forever(&self) -> LocalName;
|
||||
pub trait AttrHelpersForLayout<'dom> {
|
||||
unsafe fn value_forever(self) -> &'dom AttrValue;
|
||||
unsafe fn value_ref_forever(self) -> &'dom str;
|
||||
unsafe fn value_tokens_forever(self) -> Option<&'dom [Atom]>;
|
||||
unsafe fn local_name_atom_forever(self) -> LocalName;
|
||||
}
|
||||
|
||||
#[allow(unsafe_code)]
|
||||
impl AttrHelpersForLayout for LayoutDom<'_, Attr> {
|
||||
impl<'dom> AttrHelpersForLayout<'dom> for LayoutDom<'dom, Attr> {
|
||||
#[inline]
|
||||
unsafe fn value_forever(&self) -> &'static AttrValue {
|
||||
// This transmute is used to cheat the lifetime restriction.
|
||||
mem::transmute::<&AttrValue, &AttrValue>((*self.unsafe_get()).value.borrow_for_layout())
|
||||
unsafe fn value_forever(self) -> &'dom AttrValue {
|
||||
(*self.unsafe_get()).value.borrow_for_layout()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
unsafe fn value_ref_forever(&self) -> &'static str {
|
||||
unsafe fn value_ref_forever(self) -> &'dom str {
|
||||
&**self.value_forever()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
unsafe fn value_tokens_forever(&self) -> Option<&'static [Atom]> {
|
||||
unsafe fn value_tokens_forever(self) -> Option<&'dom [Atom]> {
|
||||
// This transmute is used to cheat the lifetime restriction.
|
||||
match *self.value_forever() {
|
||||
AttrValue::TokenList(_, ref tokens) => Some(tokens),
|
||||
|
@ -263,7 +262,7 @@ impl AttrHelpersForLayout for LayoutDom<'_, Attr> {
|
|||
}
|
||||
|
||||
#[inline]
|
||||
unsafe fn local_name_atom_forever(&self) -> LocalName {
|
||||
unsafe fn local_name_atom_forever(self) -> LocalName {
|
||||
(*self.unsafe_get()).identifier.local_name.clone()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue