@@ -1199,25 +1199,25 @@ namespace Sass {
1199
1199
1200
1200
}
1201
1201
1202
- Selector_List_Ptr Selector_List::resolve_parent_refs (Context& ctx, Selector_List_Ptr ps , bool implicit_parent)
1202
+ Selector_List_Ptr Selector_List::resolve_parent_refs (Context& ctx, std::vector<Selector_List_Obj>& pstack , bool implicit_parent)
1203
1203
{
1204
- if (!this ->has_parent_ref ()/* && !implicit_parent */ ) return this ;
1204
+ if (!this ->has_parent_ref ()) return this ;
1205
1205
Selector_List_Ptr ss = SASS_MEMORY_NEW (Selector_List, pstate ());
1206
+ Selector_List_Ptr ps = &pstack.back ();
1206
1207
for (size_t pi = 0 , pL = ps->length (); pi < pL; ++pi) {
1207
- Selector_List_Obj list = SASS_MEMORY_NEW (Selector_List, pstate ());
1208
- list->append (ps->at (pi));
1209
1208
for (size_t si = 0 , sL = this ->length (); si < sL ; ++si) {
1210
- Selector_List_Obj rv = at (si)->resolve_parent_refs (ctx, &list , implicit_parent);
1209
+ Selector_List_Obj rv = at (si)->resolve_parent_refs (ctx, pstack , implicit_parent);
1211
1210
ss->concat (&rv);
1212
1211
}
1213
1212
}
1214
1213
return ss;
1215
1214
}
1216
1215
1217
- Selector_List_Ptr Complex_Selector::resolve_parent_refs (Context& ctx, Selector_List_Ptr parents , bool implicit_parent)
1216
+ Selector_List_Ptr Complex_Selector::resolve_parent_refs (Context& ctx, std::vector<Selector_List_Obj>& pstack , bool implicit_parent)
1218
1217
{
1219
1218
Complex_Selector_Obj tail = this ->tail ();
1220
1219
Compound_Selector_Obj head = this ->head ();
1220
+ Selector_List_Ptr parents = &pstack.back ();
1221
1221
1222
1222
if (!this ->has_real_parent_ref () && !implicit_parent) {
1223
1223
Selector_List_Ptr retval = SASS_MEMORY_NEW (Selector_List, pstate ());
@@ -1226,7 +1226,7 @@ namespace Sass {
1226
1226
}
1227
1227
1228
1228
// first resolve_parent_refs the tail (which may return an expanded list)
1229
- Selector_List_Obj tails = tail ? tail->resolve_parent_refs (ctx, parents , implicit_parent) : 0 ;
1229
+ Selector_List_Obj tails = tail ? tail->resolve_parent_refs (ctx, pstack , implicit_parent) : 0 ;
1230
1230
1231
1231
if (head && head->length () > 0 ) {
1232
1232
@@ -1235,6 +1235,16 @@ namespace Sass {
1235
1235
// mix parent complex selector into the compound list
1236
1236
if (SASS_MEMORY_CAST (Parent_Selector, (*head)[0 ])) {
1237
1237
retval = SASS_MEMORY_NEW (Selector_List, pstate ());
1238
+
1239
+ // it turns out that real parent references reach
1240
+ // across @at-root rules, which comes unexpected
1241
+ if (parents == NULL && head->has_real_parent_ref ()) {
1242
+ int i = pstack.size () - 1 ;
1243
+ while (!parents && i > -1 ) {
1244
+ parents = &pstack.at (i--);
1245
+ }
1246
+ }
1247
+
1238
1248
if (parents && parents->length ()) {
1239
1249
if (tails && tails->length () > 0 ) {
1240
1250
for (size_t n = 0 , nL = tails->length (); n < nL; ++n) {
@@ -1329,7 +1339,7 @@ namespace Sass {
1329
1339
for (Simple_Selector_Obj ss : head->elements ()) {
1330
1340
if (Wrapped_Selector_Ptr ws = SASS_MEMORY_CAST (Wrapped_Selector, ss)) {
1331
1341
if (Selector_List_Ptr sl = SASS_MEMORY_CAST (Selector_List, ws->selector ())) {
1332
- if (parents) ws->selector (sl->resolve_parent_refs (ctx, parents , implicit_parent));
1342
+ if (parents) ws->selector (sl->resolve_parent_refs (ctx, pstack , implicit_parent));
1333
1343
}
1334
1344
}
1335
1345
}
0 commit comments