Skip to content

Commit 4acbae7

Browse files
committed
Merge pull request #2101 from xzyfer/feat/cleanup-selectors
Rename some selector AST nodes
2 parents dc097fd + d675a84 commit 4acbae7

30 files changed

+729
-679
lines changed

src/ast.cpp

Lines changed: 190 additions & 183 deletions
Large diffs are not rendered by default.

src/ast.hpp

Lines changed: 115 additions & 98 deletions
Large diffs are not rendered by default.

src/ast_factory.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ namespace Sass {
8383
Placeholder_Selector* new_Placeholder_Selector(std::string p, size_t l, std::string n);
8484
Pseudo_Selector* new_Pseudo_Selector(std::string p, size_t l, std::string n, Expression* expr = 0);
8585
Wrapped_Selector* new_Wrapped_Selector(std::string p, size_t l, std::string n, Simple_Base* sel);
86-
Compound_Selector* new_Compound_Selector(std::string p, size_t l, size_t s = 0);
87-
Complex_Selector* new_Complex_Selector(std::string p, size_t l, Complex_Selector::Combinator c, Complex_Selector* ctx, Compound_Selector* sel);
88-
Selector_List* new_Selector_List(std::string p, size_t l, size_t s = 0);
86+
SimpleSequence_Selector* new_SimpleSequence_Selector(std::string p, size_t l, size_t s = 0);
87+
Sequence_Selector* new_Sequence_Selector(std::string p, size_t l, Sequence_Selector::Combinator c, Sequence_Selector* ctx, SimpleSequence_Selector* sel);
88+
CommaSequence_Selector* new_CommaSequence_Selector(std::string p, size_t l, size_t s = 0);
8989
};
9090
}
9191

src/ast_fwd_decl.hpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,16 @@ namespace Sass {
7373
// selectors
7474
class Selector;
7575
class Selector_Schema;
76-
class Selector_Placeholder;
77-
class Type_Selector;
78-
class Selector_Qualifier;
76+
class Placeholder_Selector;
77+
class Element_Selector;
78+
class Class_Selector;
79+
class Id_Selector;
7980
class Attribute_Selector;
8081
class Pseudo_Selector;
8182
class Wrapped_Selector;
82-
class Compound_Selector;
83-
class Complex_Selector;
84-
class Selector_List;
83+
class SimpleSequence_Selector;
84+
class Sequence_Selector;
85+
class CommaSequence_Selector;
8586

8687
// common classes
8788
class Context;

src/constants.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace Sass {
1111
// https://github.com/sass/sass/issues/1495#issuecomment-61189114
1212
extern const unsigned long Specificity_Star = 0;
1313
extern const unsigned long Specificity_Universal = 0;
14-
extern const unsigned long Specificity_Type = 1;
14+
extern const unsigned long Specificity_Element = 1;
1515
extern const unsigned long Specificity_Base = 1000;
1616
extern const unsigned long Specificity_Class = 1000;
1717
extern const unsigned long Specificity_Attr = 1000;

src/constants.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace Sass {
1111
// The following list of selectors is by increasing specificity:
1212
extern const unsigned long Specificity_Star;
1313
extern const unsigned long Specificity_Universal;
14-
extern const unsigned long Specificity_Type;
14+
extern const unsigned long Specificity_Element;
1515
extern const unsigned long Specificity_Base;
1616
extern const unsigned long Specificity_Class;
1717
extern const unsigned long Specificity_Attr;

src/context.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ namespace Sass {
5050
std::vector<char*> strings;
5151
std::vector<Resource> resources;
5252
std::map<const std::string, const StyleSheet> sheets;
53-
Subset_Map<std::string, std::pair<Complex_Selector*, Compound_Selector*> > subset_map;
53+
Subset_Map<std::string, std::pair<Sequence_Selector*, SimpleSequence_Selector*> > subset_map;
5454
std::vector<Sass_Import_Entry> import_stack;
5555

5656
struct Sass_Compiler* c_compiler;

src/cssize.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace Sass {
2424
Cssize(Context&, Backtrace*);
2525
~Cssize() { }
2626

27-
Selector_List* selector();
27+
CommaSequence_Selector* selector();
2828

2929
Statement* operator()(Block*);
3030
Statement* operator()(Ruleset*);

src/debugger.hpp

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,9 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
8181
std::cerr << std::endl;
8282
debug_ast(root_block->expression(), ind + ":", env);
8383
debug_ast(root_block->block(), ind + " ", env);
84-
} else if (dynamic_cast<Selector_List*>(node)) {
85-
Selector_List* selector = dynamic_cast<Selector_List*>(node);
86-
std::cerr << ind << "Selector_List " << selector;
84+
} else if (dynamic_cast<CommaSequence_Selector*>(node)) {
85+
CommaSequence_Selector* selector = dynamic_cast<CommaSequence_Selector*>(node);
86+
std::cerr << ind << "CommaSequence_Selector " << selector;
8787
std::cerr << " (" << pstate_source_position(node) << ")";
8888
std::cerr << " <" << selector->hash() << ">";
8989
std::cerr << " [@media:" << selector->media_block() << "]";
@@ -108,9 +108,9 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
108108
std::cerr << " <" << prettyprint(selector->pstate().token.ws_before()) << ">" << std::endl;
109109
// debug_ast(selector->selector(), ind + "->", env);
110110

111-
} else if (dynamic_cast<Complex_Selector*>(node)) {
112-
Complex_Selector* selector = dynamic_cast<Complex_Selector*>(node);
113-
std::cerr << ind << "Complex_Selector " << selector
111+
} else if (dynamic_cast<Sequence_Selector*>(node)) {
112+
Sequence_Selector* selector = dynamic_cast<Sequence_Selector*>(node);
113+
std::cerr << ind << "Sequence_Selector " << selector
114114
<< " (" << pstate_source_position(node) << ")"
115115
<< " <" << selector->hash() << ">"
116116
<< " [weight:" << longToHex(selector->specificity()) << "]"
@@ -122,11 +122,11 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
122122
<< " -- ";
123123
std::string del;
124124
switch (selector->combinator()) {
125-
case Complex_Selector::PARENT_OF: del = ">"; break;
126-
case Complex_Selector::PRECEDES: del = "~"; break;
127-
case Complex_Selector::ADJACENT_TO: del = "+"; break;
128-
case Complex_Selector::ANCESTOR_OF: del = " "; break;
129-
case Complex_Selector::REFERENCE: del = "//"; break;
125+
case Sequence_Selector::PARENT_OF: del = ">"; break;
126+
case Sequence_Selector::PRECEDES: del = "~"; break;
127+
case Sequence_Selector::ADJACENT_TO: del = "+"; break;
128+
case Sequence_Selector::ANCESTOR_OF: del = " "; break;
129+
case Sequence_Selector::REFERENCE: del = "//"; break;
130130
}
131131
// if (del = "/") del += selector->reference()->perform(&to_string) + "/";
132132
std::cerr << " <" << prettyprint(selector->pstate().token.ws_before()) << ">" << std::endl;
@@ -138,9 +138,9 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
138138
}
139139
SourcesSet set = selector->sources();
140140
// debug_sources_set(set, ind + " @--> ");
141-
} else if (dynamic_cast<Compound_Selector*>(node)) {
142-
Compound_Selector* selector = dynamic_cast<Compound_Selector*>(node);
143-
std::cerr << ind << "Compound_Selector " << selector;
141+
} else if (dynamic_cast<SimpleSequence_Selector*>(node)) {
142+
SimpleSequence_Selector* selector = dynamic_cast<SimpleSequence_Selector*>(node);
143+
std::cerr << ind << "SimpleSequence_Selector " << selector;
144144
std::cerr << " (" << pstate_source_position(node) << ")";
145145
std::cerr << " <" << selector->hash() << ">";
146146
std::cerr << " [weight:" << longToHex(selector->specificity()) << "]";
@@ -188,9 +188,9 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
188188
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
189189
std::cerr << std::endl;
190190
debug_ast(selector->value(), ind + "[" + selector->matcher() + "] ", env);
191-
} else if (dynamic_cast<Selector_Qualifier*>(node)) {
192-
Selector_Qualifier* selector = dynamic_cast<Selector_Qualifier*>(node);
193-
std::cerr << ind << "Selector_Qualifier " << selector;
191+
} else if (dynamic_cast<Class_Selector*>(node)) {
192+
Class_Selector* selector = dynamic_cast<Class_Selector*>(node);
193+
std::cerr << ind << "Class_Selector " << selector;
194194
std::cerr << " (" << pstate_source_position(node) << ")";
195195
std::cerr << " <" << selector->hash() << ">";
196196
std::cerr << " <<" << selector->ns_name() << ">>";
@@ -199,9 +199,20 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
199199
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
200200
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
201201
std::cerr << std::endl;
202-
} else if (dynamic_cast<Type_Selector*>(node)) {
203-
Type_Selector* selector = dynamic_cast<Type_Selector*>(node);
204-
std::cerr << ind << "Type_Selector " << selector;
202+
} else if (dynamic_cast<Id_Selector*>(node)) {
203+
Id_Selector* selector = dynamic_cast<Id_Selector*>(node);
204+
std::cerr << ind << "Id_Selector " << selector;
205+
std::cerr << " (" << pstate_source_position(node) << ")";
206+
std::cerr << " <" << selector->hash() << ">";
207+
std::cerr << " <<" << selector->ns_name() << ">>";
208+
std::cerr << (selector->is_optional() ? " [is_optional]": " -");
209+
std::cerr << (selector->has_parent_ref() ? " [has-parent]": " -");
210+
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
211+
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
212+
std::cerr << std::endl;
213+
} else if (dynamic_cast<Element_Selector*>(node)) {
214+
Element_Selector* selector = dynamic_cast<Element_Selector*>(node);
215+
std::cerr << ind << "Element_Selector " << selector;
205216
std::cerr << " (" << pstate_source_position(node) << ")";
206217
std::cerr << " <" << selector->hash() << ">";
207218
std::cerr << " <<" << selector->ns_name() << ">>";
@@ -211,10 +222,10 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
211222
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
212223
std::cerr << " <" << prettyprint(selector->pstate().token.ws_before()) << ">";
213224
std::cerr << std::endl;
214-
} else if (dynamic_cast<Selector_Placeholder*>(node)) {
225+
} else if (dynamic_cast<Placeholder_Selector*>(node)) {
215226

216-
Selector_Placeholder* selector = dynamic_cast<Selector_Placeholder*>(node);
217-
std::cerr << ind << "Selector_Placeholder [" << selector->ns_name() << "] " << selector
227+
Placeholder_Selector* selector = dynamic_cast<Placeholder_Selector*>(node);
228+
std::cerr << ind << "Placeholder_Selector [" << selector->ns_name() << "] " << selector
218229
<< " <" << selector->hash() << ">"
219230
<< " [@media:" << selector->media_block() << "]"
220231
<< (selector->is_optional() ? " [is_optional]": " -")
@@ -682,11 +693,11 @@ inline void debug_node(Node* node, std::string ind = "")
682693
std::cerr << node << " ";
683694
if (node->got_line_feed) std::cerr << "[LF] ";
684695
switch (node->combinator()) {
685-
case Complex_Selector::ADJACENT_TO: std::cerr << "{+} "; break;
686-
case Complex_Selector::PARENT_OF: std::cerr << "{>} "; break;
687-
case Complex_Selector::PRECEDES: std::cerr << "{~} "; break;
688-
case Complex_Selector::REFERENCE: std::cerr << "{@} "; break;
689-
case Complex_Selector::ANCESTOR_OF: std::cerr << "{ } "; break;
696+
case Sequence_Selector::ADJACENT_TO: std::cerr << "{+} "; break;
697+
case Sequence_Selector::PARENT_OF: std::cerr << "{>} "; break;
698+
case Sequence_Selector::PRECEDES: std::cerr << "{~} "; break;
699+
case Sequence_Selector::REFERENCE: std::cerr << "{@} "; break;
700+
case Sequence_Selector::ANCESTOR_OF: std::cerr << "{ } "; break;
690701
}
691702
std::cerr << std::endl;
692703
// debug_ast(node->combinator(), ind + " ");
@@ -742,7 +753,7 @@ inline void debug_subset_map(Sass::ExtensionSubsetMap& map, std::string ind = ""
742753
if (ind == "") std::cerr << "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
743754
}
744755

745-
typedef std::pair<Complex_Selector*, Compound_Selector*> ExtensionPair;
756+
typedef std::pair<Sequence_Selector*, SimpleSequence_Selector*> ExtensionPair;
746757
typedef std::vector<ExtensionPair> SubsetMapEntries;
747758

748759
inline void debug_subset_entries(SubsetMapEntries* entries, std::string ind = "")

src/eval.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ namespace Sass {
5757
return exp.environment();
5858
}
5959

60-
Selector_List* Eval::selector()
60+
CommaSequence_Selector* Eval::selector()
6161
{
6262
return exp.selector();
6363
}
@@ -223,7 +223,7 @@ namespace Sass {
223223
if (expr->concrete_type() == Expression::MAP) {
224224
map = static_cast<Map*>(expr);
225225
}
226-
else if (Selector_List* ls = dynamic_cast<Selector_List*>(expr)) {
226+
else if (CommaSequence_Selector* ls = dynamic_cast<CommaSequence_Selector*>(expr)) {
227227
Listize listize(ctx.mem);
228228
list = dynamic_cast<List*>(ls->perform(&listize));
229229
}
@@ -257,7 +257,7 @@ namespace Sass {
257257
}
258258
}
259259
else {
260-
if (list->length() == 1 && dynamic_cast<Selector_List*>(list)) {
260+
if (list->length() == 1 && dynamic_cast<CommaSequence_Selector*>(list)) {
261261
list = dynamic_cast<Vectorized<Expression*>*>(list);
262262
}
263263
for (size_t i = 0, L = list->length(); i < L; ++i) {
@@ -1094,7 +1094,7 @@ namespace Sass {
10941094
// Value
10951095
// Textual
10961096
// Function_Call
1097-
// Selector_List
1097+
// CommaSequence_Selector
10981098
// String_Quoted
10991099
// String_Constant
11001100
// Parent_Selector
@@ -1611,10 +1611,10 @@ namespace Sass {
16111611
return e;
16121612
}
16131613

1614-
Selector_List* Eval::operator()(Selector_List* s)
1614+
CommaSequence_Selector* Eval::operator()(CommaSequence_Selector* s)
16151615
{
1616-
std::vector<Selector_List*> rv;
1617-
Selector_List* sl = SASS_MEMORY_NEW(ctx.mem, Selector_List, s->pstate());
1616+
std::vector<CommaSequence_Selector*> rv;
1617+
CommaSequence_Selector* sl = SASS_MEMORY_NEW(ctx.mem, CommaSequence_Selector, s->pstate());
16181618
sl->is_optional(s->is_optional());
16191619
sl->media_block(s->media_block());
16201620
sl->is_optional(s->is_optional());
@@ -1644,7 +1644,7 @@ namespace Sass {
16441644
}
16451645

16461646

1647-
Selector_List* Eval::operator()(Complex_Selector* s)
1647+
CommaSequence_Selector* Eval::operator()(Sequence_Selector* s)
16481648
{
16491649
bool implicit_parent = !exp.old_at_root_without_rule;
16501650
return s->resolve_parent_refs(ctx, selector(), implicit_parent);
@@ -1661,21 +1661,21 @@ namespace Sass {
16611661
return ss;
16621662
}
16631663

1664-
Selector_List* Eval::operator()(Selector_Schema* s)
1664+
CommaSequence_Selector* Eval::operator()(Selector_Schema* s)
16651665
{
16661666
// the parser will look for a brace to end the selector
16671667
std::string result_str(s->contents()->perform(this)->to_string(ctx.c_options));
16681668
result_str = unquote(Util::rtrim(result_str)) + "\n{";
16691669
Parser p = Parser::from_c_str(result_str.c_str(), ctx, s->pstate());
16701670
p.last_media_block = s->media_block();
1671-
Selector_List* sl = p.parse_selector_list(exp.block_stack.back()->is_root());
1671+
CommaSequence_Selector* sl = p.parse_selector_list(exp.block_stack.back()->is_root());
16721672
if (s->has_parent_ref()) sl->remove_parent_selectors();
16731673
return operator()(sl);
16741674
}
16751675

16761676
Expression* Eval::operator()(Parent_Selector* p)
16771677
{
1678-
Selector_List* pr = selector();
1678+
CommaSequence_Selector* pr = selector();
16791679
if (pr) {
16801680
exp.selector_stack.pop_back();
16811681
pr = operator()(pr);

0 commit comments

Comments
 (0)