Commit 8360fd9c by Aaron Leung

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

parent 7094397e
......@@ -21,13 +21,9 @@ namespace Sass {
size_t line_number;
bool own_source;
// TO DO: move the environment up into the context class when it's ready
// map<Token, Node> environment;
Context& context;
Node root;
// vector<Node> statements;
Token lexed;
Document(string path, char* source = 0);
......@@ -122,6 +118,7 @@ namespace Sass {
Node parse_ruleset(bool definition = false);
Node parse_selector_group();
Node parse_selector();
Node parse_selector_combinator();
Node parse_simple_selector_sequence();
Node parse_simple_selector();
Node parse_pseudo();
......
......@@ -152,55 +152,55 @@ namespace Sass {
Node Document::parse_selector_group()
{
// Node group(Node::selector_group, line_number, 1);
// 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;
Node group(Node::selector_group, line_number, 1);
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();
// return group;
}
Node Document::parse_selector()
{
// Node selector(Node::selector, line_number, 1);
// if (lex< exactly<'+'> >() ||
// lex< exactly<'~'> >() ||
// lex< exactly<'>'> >()) {
// selector << Node(Node::selector_combinator, line_number, lexed);
// }
// Node s(parse_simple_selector_sequence());
// if (s.has_backref) selector.has_backref = true;
// selector << s;
// while (lex< exactly<'+'> >() ||
// lex< exactly<'~'> >() ||
// lex< exactly<'>'> >() ||
// lex< ancestor_of >() /*||
// s.terminal_backref && lex< no_spaces >()*/) {
// selector << Node(Node::selector_combinator, line_number, lexed);
// s = parse_simple_selector_sequence();
// if (s.has_backref) selector.has_backref = true;
// 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;
Node selector(Node::selector, line_number, 1);
if (lex< exactly<'+'> >() ||
lex< exactly<'~'> >() ||
lex< exactly<'>'> >()) {
selector << Node(Node::selector_combinator, line_number, lexed);
}
Node s(parse_simple_selector_sequence());
if (s.has_backref) selector.has_backref = true;
selector << s;
while (lex< exactly<'+'> >() ||
lex< exactly<'~'> >() ||
lex< exactly<'>'> >() ||
lex< ancestor_of >() /*||
s.terminal_backref && lex< no_spaces >()*/) {
selector << Node(Node::selector_combinator, line_number, lexed);
s = parse_simple_selector_sequence();
if (s.has_backref) selector.has_backref = true;
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;
}
Node Document::parse_simple_selector_sequence()
......@@ -232,6 +232,13 @@ namespace Sass {
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()
{
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