Skip to content
This repository was archived by the owner on Oct 24, 2025. It is now read-only.

Commit ccedd98

Browse files
author
Aaron Leung
committed
New top-level inheritance resolving function. In progress.
1 parent 766673f commit ccedd98

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

eval_apply.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)