@@ -203,6 +203,7 @@ namespace Sass {
203203 break ;
204204 }
205205
206+ // extendee -> { extenders }
206207 ctx.extensions .insert (pair<Node, Node>(expr[0 ], prefix));
207208 ctx.has_extensions = true ;
208209 } break ;
@@ -1083,6 +1084,56 @@ namespace Sass {
10831084 // selector to see whether it's the base of an extension. Needs to be a
10841085 // separate pass after evaluation because extension requests may be located
10851086 // within mixins, and their targets may be interpolated.
1087+ void extend (Node expr, multimap<Node, Node>& extension_requests, Node_Factory& new_Node)
1088+ {
1089+ switch (expr.type ())
1090+ {
1091+ case Node::ruleset: {
1092+ // check single selector
1093+ if (expr[2 ].type () != Node::selector_group) {
1094+ Node sel (selector_base (expr[2 ]));
1095+ if (extension_requests.count (sel)) {
1096+ for (multimap<Node, Node>::iterator i = extension_requests.lower_bound (sel); i != extension_requests.upper_bound (sel); ++i) {
1097+ // something!
1098+ }
1099+ }
1100+ }
1101+ // individually check each selector in a group
1102+ else {
1103+ Node group (expr[2 ]);
1104+ for (size_t i = 0 , S = group.size (); i < S; ++i) {
1105+ Node sel (selector_base (group[i]));
1106+ if (extension_requests.count (sel)) {
1107+ for (multimap<Node, Node>::iterator j = extension_requests.lower_bound (sel); j != extension_requests.upper_bound (sel); ++j) {
1108+ // something!
1109+ }
1110+ }
1111+ }
1112+ }
1113+ } break ;
1114+
1115+ case Node::root:
1116+ case Node::block:
1117+ case Node::mixin_call:
1118+ case Node::if_directive:
1119+ case Node::for_through_directive:
1120+ case Node::for_to_directive:
1121+ case Node::each_directive:
1122+ case Node::while_directive: {
1123+ // at this point, all directives have been expanded into style blocks,
1124+ // so just recursively process their children
1125+ for (size_t i = 0 , S < expr.size (); i < S; ++i) {
1126+ extend (expr[i], extension_requests, new_Node);
1127+ }
1128+ } break ;
1129+
1130+ default : {
1131+ // do nothing
1132+ } break ;
1133+ }
1134+ return ;
1135+ }
1136+
10861137 void extend_selectors (vector<pair<Node, Node> >& pending, multimap<Node, Node>& extension_table, Node_Factory& new_Node)
10871138 {
10881139 for (size_t i = 0 , S = pending.size (); i < S; ++i) {
0 commit comments