Commit 8360fd9c by Aaron Leung

Shelving singleton selector optimization for now. Will pick it back up if I have extra time.

parent 7094397e
...@@ -20,14 +20,10 @@ namespace Sass { ...@@ -20,14 +20,10 @@ namespace Sass {
const char* position; const char* position;
size_t line_number; size_t line_number;
bool own_source; bool own_source;
// TO DO: move the environment up into the context class when it's ready
// map<Token, Node> environment;
Context& context; Context& context;
Node root; Node root;
// vector<Node> statements;
Token lexed; Token lexed;
Document(string path, char* source = 0); Document(string path, char* source = 0);
...@@ -122,6 +118,7 @@ namespace Sass { ...@@ -122,6 +118,7 @@ namespace Sass {
Node parse_ruleset(bool definition = false); Node parse_ruleset(bool definition = false);
Node parse_selector_group(); Node parse_selector_group();
Node parse_selector(); Node parse_selector();
Node parse_selector_combinator();
Node parse_simple_selector_sequence(); Node parse_simple_selector_sequence();
Node parse_simple_selector(); Node parse_simple_selector();
Node parse_pseudo(); Node parse_pseudo();
......
...@@ -152,55 +152,55 @@ namespace Sass { ...@@ -152,55 +152,55 @@ namespace Sass {
Node Document::parse_selector_group() Node Document::parse_selector_group()
{ {
// Node group(Node::selector_group, line_number, 1); Node group(Node::selector_group, line_number, 1);
// group << parse_selector(); group << parse_selector();
// while (lex< exactly<','> >()) group << parse_selector();
// return group;
Node sel1(parse_selector());
if (!lex< exactly<','> >()) return sel1;
Node group(Node::selector_group, line_number, 2);
group << sel1;
while (lex< exactly<','> >()) group << parse_selector(); while (lex< exactly<','> >()) group << parse_selector();
return group; return group;
// Node sel1(parse_selector());
// if (!lex< exactly<','> >()) return sel1;
//
// Node group(Node::selector_group, line_number, 2);
// group << sel1;
// while (lex< exactly<','> >()) group << parse_selector();
// return group;
} }
Node Document::parse_selector() Node Document::parse_selector()
{ {
// Node selector(Node::selector, line_number, 1); Node selector(Node::selector, line_number, 1);
// if (lex< exactly<'+'> >() || if (lex< exactly<'+'> >() ||
// lex< exactly<'~'> >() || lex< exactly<'~'> >() ||
// lex< exactly<'>'> >()) { lex< exactly<'>'> >()) {
// selector << Node(Node::selector_combinator, line_number, lexed); selector << Node(Node::selector_combinator, line_number, lexed);
// } }
// Node s(parse_simple_selector_sequence()); Node s(parse_simple_selector_sequence());
// if (s.has_backref) selector.has_backref = true; if (s.has_backref) selector.has_backref = true;
// selector << s; selector << s;
// while (lex< exactly<'+'> >() || while (lex< exactly<'+'> >() ||
// lex< exactly<'~'> >() || lex< exactly<'~'> >() ||
// lex< exactly<'>'> >() || lex< exactly<'>'> >() ||
// lex< ancestor_of >() /*|| lex< ancestor_of >() /*||
// s.terminal_backref && lex< no_spaces >()*/) { s.terminal_backref && lex< no_spaces >()*/) {
// selector << Node(Node::selector_combinator, line_number, lexed); selector << Node(Node::selector_combinator, line_number, lexed);
// s = parse_simple_selector_sequence(); s = parse_simple_selector_sequence();
// if (s.has_backref) selector.has_backref = true; if (s.has_backref) selector.has_backref = true;
// selector << s; selector << s;
// }
// return selector;
Node seq1(parse_simple_selector_sequence());
if (!lex< exactly<','> >()) return seq1;
Node selector(Node::selector, line_number, 2);
if (seq1.has_backref) selector.has_backref = true;
selector << seq1;
while (lex< exactly<','> >()) {
Node seq(parse_simple_selector_sequence());
if (seq.has_backref) selector.has_backref = true;
selector << seq;
} }
return selector; return selector;
// Node seq1(parse_simple_selector_sequence());
// if (lex< exactly<','> >()) return seq1;
//
// Node selector(Node::selector, line_number, 2);
// if (seq1.has_backref) selector.has_backref = true;
// selector << seq1;
// while (!lex< exactly<','> >()) {
// Node seq(parse_simple_selector_sequence());
// if (seq.has_backref) selector.has_backref = true;
// selector << seq;
// }
// return selector;
} }
Node Document::parse_simple_selector_sequence() Node Document::parse_simple_selector_sequence()
...@@ -232,6 +232,13 @@ namespace Sass { ...@@ -232,6 +232,13 @@ namespace Sass {
return seq; return seq;
} }
Node Document::parse_selector_combinator()
{
lex< exactly<'+'> >() || lex< exactly<'~'> >() ||
lex< exactly<'>'> >() || lex< ancestor_of >();
return Node(Node::selector_combinator, line_number, lexed);
}
Node Document::parse_simple_selector() Node Document::parse_simple_selector()
{ {
if (lex< id_name >() || lex< class_name >()) { if (lex< id_name >() || lex< class_name >()) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment