Closed Bug 1455784 Opened 4 years ago Closed 4 years ago

Use a tagged union to shrink StyleSource


(Core :: CSS Parsing and Computation, enhancement)

Not set



Tracking Status
firefox61 --- fixed


(Reporter: bholley, Assigned: bholley)



(3 files, 1 obsolete file)

right now StyleSource is a three-variant enum, with one of them being "None" to avoid consuming a third word. We could turn this all into a one-word Option<ArcUnion<Rule, Declaration>> with the appropriate machinery.

I hacked together a quick implementation of ArcUnion. Haven't finished hooking it up to StyleSource, but looking for quick feedback on the approach and ergonomics.
MozReview-Commit-ID: Jxp2A7cj6CV
Attachment #8969836 - Flags: feedback?(manishearth)
Comment on attachment 8969836 [details] [diff] [review]
ArcUnion prototype. v1

Review of attachment 8969836 [details] [diff] [review]:

this looks pretty good.

I'd love to eventually publish ServoArc and/or get the Rust stdlib to expose enough so that it can be implemented compatibly with sync::Arc

::: servo/components/servo_arc/
@@ +976,5 @@
> +    /// Similar to deref, but uses the lifetime |a| rather than the lifetime of
> +    /// self, which is incompatible with the signature of the Deref trait.
> +    #[inline]
> +    pub fn get(&self) -> &'a T {
> +        &*self.0

nit: this can just be self.0, immutable references are Copy
Attachment #8969836 - Flags: feedback?(manishearth) → feedback+
Attached patch Part 1 - ArcUnion. v1 (obsolete) — Splinter Review
MozReview-Commit-ID: Jxp2A7cj6CV
Attachment #8970741 - Flags: review?(manishearth)
MozReview-Commit-ID: AT4sud9goGV
Attachment #8970742 - Flags: review?(manishearth)
MozReview-Commit-ID: Jxp2A7cj6CV
Attachment #8970743 - Flags: review?(manishearth)
Attachment #8970741 - Attachment is obsolete: true
Attachment #8970741 - Flags: review?(manishearth)
Comment on attachment 8970743 [details] [diff] [review]
Part 1 - ArcUnion. v2

Review of attachment 8970743 [details] [diff] [review]:

::: servo/components/servo_arc/
@@ +1021,5 @@
> +    First(ArcBorrow<'a, A>),
> +    Second(ArcBorrow<'a, B>),
> +}
> +
> +impl<A: 'static, B: 'static> ArcUnion<A, B> {

might wish to mark some of these methods `#[inline]`
Attachment #8970743 - Flags: review?(manishearth) → review+
(In reply to Manish Goregaokar [:manishearth] from comment #7)
> might wish to mark some of these methods `#[inline]`

I thought that was unnecessary given that they're generic?
Oh, that's correct. Sorry.
Attachment #8970742 - Flags: review?(manishearth) → review+
Closed: 4 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla61
You need to log in before you can comment on or make changes to this bug.