Skip to content

Commit f43d007

Browse files
authored
Merge pull request #2247 from mgreter/bugfix/issue-2246
Fixes extensions with selector schema in at-root
2 parents 72457e9 + 05c86cd commit f43d007

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

src/expand.cpp

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -611,18 +611,29 @@ namespace Sass {
611611
{
612612
if (CommaSequence_Selector* extender = dynamic_cast<CommaSequence_Selector*>(selector())) {
613613
Selector* s = e->selector();
614-
if (Selector_Schema* schema = dynamic_cast<Selector_Schema*>(s)) {
615-
if (schema->has_parent_ref()) s = eval(schema);
614+
CommaSequence_Selector* sl = NULL;
615+
// check if we already have a valid selector list
616+
if ((sl = dynamic_cast<CommaSequence_Selector*>(s))) {}
617+
// convert selector schema to a selector list
618+
else if (Selector_Schema* schema = dynamic_cast<Selector_Schema*>(s)) {
619+
if (schema->has_real_parent_ref()) {
620+
sl = eval(schema);
621+
} else {
622+
selector_stack.push_back(0);
623+
sl = eval(schema);
624+
sl->remove_parent_selectors();
625+
selector_stack.pop_back();
626+
}
616627
}
617-
if (CommaSequence_Selector* sl = dynamic_cast<CommaSequence_Selector*>(s)) {
618-
for (Sequence_Selector* cs : *sl) {
619-
if (cs != NULL && cs->head() != NULL) {
620-
cs->head()->media_block(media_block_stack.back());
621-
}
628+
// abort on invalid selector
629+
if (sl == NULL) return NULL;
630+
for (Sequence_Selector* cs : *sl) {
631+
if (cs != NULL && cs->head() != NULL) {
632+
cs->head()->media_block(media_block_stack.back());
622633
}
623634
}
624635
selector_stack.push_back(0);
625-
expand_selector_list(s, extender);
636+
expand_selector_list(sl, extender);
626637
selector_stack.pop_back();
627638
}
628639
return 0;

0 commit comments

Comments
 (0)