From 6baf0d2340239c56d583645bc1a8287c68480ee3 Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Fri, 26 Jun 2020 05:37:57 -0400 Subject: [PATCH] reduce size of `Namespace` and `Toplevel` --- src/output.rs | 38 ++++++++++++++++++++++---------------- src/selector/attribute.rs | 2 +- src/selector/common.rs | 2 +- src/selector/parse.rs | 4 ++-- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/output.rs b/src/output.rs index 2ef85ac..13c500c 100644 --- a/src/output.rs +++ b/src/output.rs @@ -12,23 +12,20 @@ use crate::{ style::Style, }; +#[derive(Debug, Clone)] +struct ToplevelUnknownAtRule { + name: String, + params: String, + body: Vec, +} + #[derive(Debug, Clone)] enum Toplevel { RuleSet(Selector, Vec), MultilineComment(String), - UnknownAtRule { - name: String, - params: String, - body: Vec, - }, - Media { - query: String, - body: Vec, - }, - Supports { - params: String, - body: Vec, - }, + UnknownAtRule(Box), + Media { query: String, body: Vec }, + Supports { params: String, body: Vec }, Newline, Style(Style), } @@ -113,7 +110,11 @@ impl Css { let UnknownAtRule { params, body, name, .. } = *u; - vals.push(Toplevel::UnknownAtRule { params, body, name }) + vals.push(Toplevel::UnknownAtRule(Box::new(ToplevelUnknownAtRule { + params, + body, + name, + }))) } Stmt::Return(..) => unreachable!(), Stmt::AtRoot { body } => body @@ -138,7 +139,11 @@ impl Css { let UnknownAtRule { params, body, name, .. } = *u; - vec![Toplevel::UnknownAtRule { params, name, body }] + vec![Toplevel::UnknownAtRule(Box::new(ToplevelUnknownAtRule { + params, + name, + body, + }))] } Stmt::Return(..) => unreachable!("@return: {:?}", stmt), Stmt::AtRoot { .. } => unreachable!("@at-root: {:?}", stmt), @@ -206,7 +211,8 @@ impl Css { has_written = true; writeln!(buf, "{}/*{}*/", padding, s)?; } - Toplevel::UnknownAtRule { params, name, body } => { + Toplevel::UnknownAtRule(u) => { + let ToplevelUnknownAtRule { params, name, body } = *u; if should_emit_newline { should_emit_newline = false; writeln!(buf)?; diff --git a/src/selector/attribute.rs b/src/selector/attribute.rs index d0706e1..3fb7dc1 100644 --- a/src/selector/attribute.rs +++ b/src/selector/attribute.rs @@ -84,7 +84,7 @@ fn attribute_name(parser: &mut Parser<'_>, start: Span) -> SassResult), None, } diff --git a/src/selector/parse.rs b/src/selector/parse.rs index 5932725..00e9307 100644 --- a/src/selector/parse.rs +++ b/src/selector/parse.rs @@ -427,11 +427,11 @@ impl<'a, 'b> SelectorParser<'a, 'b> { self.parser.toks.next(); if let Some(Token { kind: '*', .. }) = self.parser.toks.peek() { self.parser.toks.next(); - SimpleSelector::Universal(Namespace::Other(name_or_namespace)) + SimpleSelector::Universal(Namespace::Other(name_or_namespace.into_boxed_str())) } else { SimpleSelector::Type(QualifiedName { ident: self.parser.parse_identifier()?.node, - namespace: Namespace::Other(name_or_namespace), + namespace: Namespace::Other(name_or_namespace.into_boxed_str()), }) } }