Skip to content

Commit dc097fd

Browse files
committed
Merge pull request #2100 from xzyfer/feat/selector-resolve-parent-refs
Rename parentize to resolve_parent_refs
2 parents d33f45b + a3020db commit dc097fd

File tree

6 files changed

+17
-13
lines changed

6 files changed

+17
-13
lines changed

src/ast.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1084,28 +1084,27 @@ namespace Sass {
10841084

10851085
}
10861086

1087-
Selector_List* Selector_List::parentize(Selector_List* ps, Context& ctx)
1087+
Selector_List* Selector_List::resolve_parent_refs(Context& ctx, Selector_List* ps, bool implicit_parent)
10881088
{
1089-
if (!this->has_parent_ref()) return this;
1089+
if (!this->has_parent_ref()/* && !implicit_parent*/) return this;
10901090
Selector_List* ss = SASS_MEMORY_NEW(ctx.mem, Selector_List, pstate());
10911091
for (size_t pi = 0, pL = ps->length(); pi < pL; ++pi) {
10921092
Selector_List* list = SASS_MEMORY_NEW(ctx.mem, Selector_List, pstate());
10931093
*list << (*ps)[pi];
10941094
for (size_t si = 0, sL = this->length(); si < sL; ++si) {
1095-
*ss += (*this)[si]->parentize(list, ctx);
1095+
*ss += (*this)[si]->resolve_parent_refs(ctx, list, implicit_parent);
10961096
}
10971097
}
10981098
return ss;
10991099
}
11001100

1101-
Selector_List* Complex_Selector::parentize(Selector_List* parents, Context& ctx)
1101+
Selector_List* Complex_Selector::resolve_parent_refs(Context& ctx, Selector_List* parents, bool implicit_parent)
11021102
{
1103-
11041103
Complex_Selector* tail = this->tail();
11051104
Compound_Selector* head = this->head();
11061105

1107-
// first parentize the tail (which may return an expanded list)
1108-
Selector_List* tails = tail ? tail->parentize(parents, ctx) : 0;
1106+
// first resolve_parent_refs the tail (which may return an expanded list)
1107+
Selector_List* tails = tail ? tail->resolve_parent_refs(ctx, parents, implicit_parent) : 0;
11091108

11101109
if (head && head->length() > 0) {
11111110

@@ -1186,7 +1185,7 @@ namespace Sass {
11861185
for (Simple_Selector* ss : *head) {
11871186
if (Wrapped_Selector* ws = dynamic_cast<Wrapped_Selector*>(ss)) {
11881187
if (Selector_List* sl = dynamic_cast<Selector_List*>(ws->selector())) {
1189-
if (parents) ws->selector(sl->parentize(parents, ctx));
1188+
if (parents) ws->selector(sl->resolve_parent_refs(ctx, parents, implicit_parent));
11901189
}
11911190
}
11921191
}

src/ast.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2404,7 +2404,7 @@ namespace Sass {
24042404
Complex_Selector* innermost() { return last(); };
24052405

24062406
size_t length() const;
2407-
Selector_List* parentize(Selector_List* parents, Context& ctx);
2407+
Selector_List* resolve_parent_refs(Context& ctx, Selector_List* parents, bool implicit_parent);
24082408
virtual bool is_superselector_of(Compound_Selector* sub, std::string wrapping = "");
24092409
virtual bool is_superselector_of(Complex_Selector* sub, std::string wrapping = "");
24102410
virtual bool is_superselector_of(Selector_List* sub, std::string wrapping = "");
@@ -2517,7 +2517,7 @@ namespace Sass {
25172517
virtual bool has_parent_ref();
25182518
void remove_parent_selectors();
25192519
// virtual Selector_Placeholder* find_placeholder();
2520-
Selector_List* parentize(Selector_List* parents, Context& ctx);
2520+
Selector_List* resolve_parent_refs(Context& ctx, Selector_List* parents, bool implicit_parent = true);
25212521
virtual bool is_superselector_of(Compound_Selector* sub, std::string wrapping = "");
25222522
virtual bool is_superselector_of(Complex_Selector* sub, std::string wrapping = "");
25232523
virtual bool is_superselector_of(Selector_List* sub, std::string wrapping = "");

src/eval.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1646,7 +1646,8 @@ namespace Sass {
16461646

16471647
Selector_List* Eval::operator()(Complex_Selector* s)
16481648
{
1649-
return s->parentize(selector(), ctx);
1649+
bool implicit_parent = !exp.old_at_root_without_rule;
1650+
return s->resolve_parent_refs(ctx, selector(), implicit_parent);
16501651

16511652
}
16521653

src/expand.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ namespace Sass {
2222
media_block_stack(std::vector<Media_Block*>()),
2323
backtrace_stack(std::vector<Backtrace*>()),
2424
in_keyframes(false),
25-
at_root_without_rule(false)
25+
at_root_without_rule(false),
26+
old_at_root_without_rule(false)
2627
{
2728
env_stack.push_back(0);
2829
env_stack.push_back(env);
@@ -87,6 +88,8 @@ namespace Sass {
8788

8889
Statement* Expand::operator()(Ruleset* r)
8990
{
91+
LOCAL_FLAG(old_at_root_without_rule, at_root_without_rule);
92+
9093
if (in_keyframes) {
9194
Keyframe_Rule* k = SASS_MEMORY_NEW(ctx.mem, Keyframe_Rule, r->pstate(), r->block()->perform(this)->block());
9295
if (r->selector()) {

src/expand.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ namespace Sass {
3737
std::vector<Backtrace*> backtrace_stack;
3838
bool in_keyframes;
3939
bool at_root_without_rule;
40+
bool old_at_root_without_rule;
4041

4142
Statement* fallback_impl(AST_Node* n);
4243

src/functions.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1745,7 +1745,7 @@ namespace Sass {
17451745
for(;itr != parsedSelectors.end(); ++itr) {
17461746
Selector_List* child = *itr;
17471747
std::vector<Complex_Selector*> exploded;
1748-
Selector_List* rv = child->parentize(result, ctx);
1748+
Selector_List* rv = child->resolve_parent_refs(ctx, result);
17491749
for (size_t m = 0, mLen = rv->length(); m < mLen; ++m) {
17501750
exploded.push_back((*rv)[m]);
17511751
}

0 commit comments

Comments
 (0)