sassc 2.2.1 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +13 -0
- data/Rakefile +1 -3
- data/ext/extconf.rb +13 -5
- data/ext/libsass/VERSION +1 -1
- data/ext/libsass/include/sass/base.h +2 -1
- data/ext/libsass/include/sass/context.h +1 -0
- data/ext/libsass/src/ast.cpp +49 -59
- data/ext/libsass/src/ast.hpp +263 -102
- data/ext/libsass/src/ast_def_macros.hpp +8 -0
- data/ext/libsass/src/ast_fwd_decl.cpp +2 -1
- data/ext/libsass/src/ast_fwd_decl.hpp +40 -116
- data/ext/libsass/src/ast_helpers.hpp +292 -0
- data/ext/libsass/src/ast_sel_cmp.cpp +209 -722
- data/ext/libsass/src/ast_sel_super.cpp +539 -0
- data/ext/libsass/src/ast_sel_unify.cpp +207 -212
- data/ext/libsass/src/ast_sel_weave.cpp +616 -0
- data/ext/libsass/src/ast_selectors.cpp +559 -1001
- data/ext/libsass/src/ast_selectors.hpp +311 -367
- data/ext/libsass/src/ast_supports.cpp +1 -17
- data/ext/libsass/src/ast_values.cpp +216 -29
- data/ext/libsass/src/ast_values.hpp +42 -33
- data/ext/libsass/src/bind.cpp +1 -1
- data/ext/libsass/src/cencode.c +4 -6
- data/ext/libsass/src/check_nesting.cpp +5 -6
- data/ext/libsass/src/check_nesting.hpp +4 -0
- data/ext/libsass/src/color_maps.cpp +11 -10
- data/ext/libsass/src/color_maps.hpp +0 -8
- data/ext/libsass/src/constants.cpp +5 -0
- data/ext/libsass/src/constants.hpp +6 -0
- data/ext/libsass/src/context.cpp +30 -60
- data/ext/libsass/src/context.hpp +8 -20
- data/ext/libsass/src/cssize.cpp +36 -120
- data/ext/libsass/src/cssize.hpp +4 -10
- data/ext/libsass/src/dart_helpers.hpp +199 -0
- data/ext/libsass/src/debugger.hpp +364 -207
- data/ext/libsass/src/emitter.cpp +3 -4
- data/ext/libsass/src/emitter.hpp +0 -2
- data/ext/libsass/src/environment.hpp +5 -0
- data/ext/libsass/src/error_handling.cpp +21 -0
- data/ext/libsass/src/error_handling.hpp +25 -3
- data/ext/libsass/src/eval.cpp +33 -153
- data/ext/libsass/src/eval.hpp +11 -13
- data/ext/libsass/src/eval_selectors.cpp +75 -0
- data/ext/libsass/src/expand.cpp +214 -167
- data/ext/libsass/src/expand.hpp +26 -6
- data/ext/libsass/src/extender.cpp +1186 -0
- data/ext/libsass/src/extender.hpp +399 -0
- data/ext/libsass/src/extension.cpp +43 -0
- data/ext/libsass/src/extension.hpp +89 -0
- data/ext/libsass/src/file.cpp +15 -14
- data/ext/libsass/src/file.hpp +5 -12
- data/ext/libsass/src/fn_colors.cpp +12 -10
- data/ext/libsass/src/fn_lists.cpp +12 -11
- data/ext/libsass/src/fn_miscs.cpp +22 -34
- data/ext/libsass/src/fn_numbers.cpp +13 -6
- data/ext/libsass/src/fn_selectors.cpp +94 -124
- data/ext/libsass/src/fn_strings.cpp +16 -14
- data/ext/libsass/src/fn_utils.cpp +5 -6
- data/ext/libsass/src/fn_utils.hpp +9 -3
- data/ext/libsass/src/inspect.cpp +154 -117
- data/ext/libsass/src/inspect.hpp +10 -8
- data/ext/libsass/src/lexer.cpp +17 -81
- data/ext/libsass/src/lexer.hpp +5 -16
- data/ext/libsass/src/listize.cpp +22 -36
- data/ext/libsass/src/listize.hpp +8 -9
- data/ext/libsass/src/memory/SharedPtr.hpp +39 -5
- data/ext/libsass/src/operation.hpp +27 -17
- data/ext/libsass/src/operators.cpp +1 -0
- data/ext/libsass/src/ordered_map.hpp +112 -0
- data/ext/libsass/src/output.cpp +30 -49
- data/ext/libsass/src/output.hpp +1 -1
- data/ext/libsass/src/parser.cpp +211 -381
- data/ext/libsass/src/parser.hpp +17 -15
- data/ext/libsass/src/parser_selectors.cpp +189 -0
- data/ext/libsass/src/permutate.hpp +140 -0
- data/ext/libsass/src/position.hpp +1 -1
- data/ext/libsass/src/prelexer.cpp +6 -6
- data/ext/libsass/src/remove_placeholders.cpp +55 -56
- data/ext/libsass/src/remove_placeholders.hpp +21 -18
- data/ext/libsass/src/sass.hpp +1 -0
- data/ext/libsass/src/sass2scss.cpp +4 -4
- data/ext/libsass/src/sass_context.cpp +42 -91
- data/ext/libsass/src/sass_context.hpp +2 -2
- data/ext/libsass/src/sass_functions.cpp +1 -1
- data/ext/libsass/src/sass_values.cpp +0 -1
- data/ext/libsass/src/stylesheet.cpp +22 -0
- data/ext/libsass/src/stylesheet.hpp +57 -0
- data/ext/libsass/src/to_value.cpp +2 -2
- data/ext/libsass/src/to_value.hpp +1 -1
- data/ext/libsass/src/units.cpp +5 -3
- data/ext/libsass/src/util.cpp +10 -12
- data/ext/libsass/src/util.hpp +2 -3
- data/ext/libsass/src/util_string.cpp +111 -61
- data/ext/libsass/src/util_string.hpp +61 -8
- data/lib/sassc/engine.rb +5 -3
- data/lib/sassc/functions_handler.rb +8 -8
- data/lib/sassc/native.rb +1 -1
- data/lib/sassc/script.rb +4 -4
- data/lib/sassc/version.rb +1 -1
- data/test/functions_test.rb +18 -1
- data/test/native_test.rb +1 -1
- metadata +17 -12
- data/ext/libsass/src/extend.cpp +0 -2132
- data/ext/libsass/src/extend.hpp +0 -86
- data/ext/libsass/src/node.cpp +0 -322
- data/ext/libsass/src/node.hpp +0 -118
- data/ext/libsass/src/paths.hpp +0 -71
- data/ext/libsass/src/sass_util.cpp +0 -152
- data/ext/libsass/src/sass_util.hpp +0 -256
- data/ext/libsass/src/subset_map.cpp +0 -58
- data/ext/libsass/src/subset_map.hpp +0 -76
data/ext/libsass/src/emitter.cpp
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
+
// sass.hpp must go before all system headers to get the
|
2
|
+
// __EXTENSIONS__ fix on Solaris.
|
1
3
|
#include "sass.hpp"
|
2
|
-
#include "util.hpp"
|
3
|
-
#include "context.hpp"
|
4
|
-
#include "output.hpp"
|
5
4
|
#include "emitter.hpp"
|
6
5
|
#include "util_string.hpp"
|
7
|
-
#include "
|
6
|
+
#include "util.hpp"
|
8
7
|
|
9
8
|
namespace Sass {
|
10
9
|
|
data/ext/libsass/src/emitter.hpp
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
#ifndef SASS_ENVIRONMENT_H
|
2
2
|
#define SASS_ENVIRONMENT_H
|
3
3
|
|
4
|
+
// sass.hpp must go before all system headers to get the
|
5
|
+
// __EXTENSIONS__ fix on Solaris.
|
6
|
+
#include "sass.hpp"
|
7
|
+
|
8
|
+
#include <map>
|
4
9
|
#include <string>
|
5
10
|
#include "ast_fwd_decl.hpp"
|
6
11
|
#include "ast_def_macros.hpp"
|
@@ -132,6 +132,27 @@ namespace Sass {
|
|
132
132
|
prefix = err.errtype();
|
133
133
|
}
|
134
134
|
|
135
|
+
TopLevelParent::TopLevelParent(Backtraces traces, ParserState pstate)
|
136
|
+
: Base(pstate, "Top-level selectors may not contain the parent selector \"&\".", traces)
|
137
|
+
{
|
138
|
+
|
139
|
+
}
|
140
|
+
|
141
|
+
UnsatisfiedExtend::UnsatisfiedExtend(Backtraces traces, Extension extension)
|
142
|
+
: Base(extension.target->pstate(), "The target selector was not found.\n"
|
143
|
+
"Use \"@extend " + extension.target->to_string() + " !optional\" to avoid this error.", traces)
|
144
|
+
{
|
145
|
+
|
146
|
+
}
|
147
|
+
|
148
|
+
ExtendAcrossMedia::ExtendAcrossMedia(Backtraces traces, Extension extension)
|
149
|
+
: Base(extension.target->pstate(), "You may not @extend selectors across media queries.\n"
|
150
|
+
"Use \"@extend " + extension.target->to_string() + " !optional\" to avoid this error.", traces)
|
151
|
+
{
|
152
|
+
|
153
|
+
}
|
154
|
+
|
155
|
+
|
135
156
|
}
|
136
157
|
|
137
158
|
|
@@ -1,6 +1,10 @@
|
|
1
1
|
#ifndef SASS_ERROR_HANDLING_H
|
2
2
|
#define SASS_ERROR_HANDLING_H
|
3
3
|
|
4
|
+
// sass.hpp must go before all system headers to get the
|
5
|
+
// __EXTENSIONS__ fix on Solaris.
|
6
|
+
#include "sass.hpp"
|
7
|
+
|
4
8
|
#include <string>
|
5
9
|
#include <sstream>
|
6
10
|
#include <stdexcept>
|
@@ -205,9 +209,27 @@ namespace Sass {
|
|
205
209
|
};
|
206
210
|
|
207
211
|
class SassValueError : public Base {
|
208
|
-
|
209
|
-
|
210
|
-
|
212
|
+
public:
|
213
|
+
SassValueError(Backtraces traces, ParserState pstate, OperationError& err);
|
214
|
+
virtual ~SassValueError() throw() {};
|
215
|
+
};
|
216
|
+
|
217
|
+
class TopLevelParent : public Base {
|
218
|
+
public:
|
219
|
+
TopLevelParent(Backtraces traces, ParserState pstate);
|
220
|
+
virtual ~TopLevelParent() throw() {};
|
221
|
+
};
|
222
|
+
|
223
|
+
class UnsatisfiedExtend : public Base {
|
224
|
+
public:
|
225
|
+
UnsatisfiedExtend(Backtraces traces, Extension extension);
|
226
|
+
virtual ~UnsatisfiedExtend() throw() {};
|
227
|
+
};
|
228
|
+
|
229
|
+
class ExtendAcrossMedia : public Base {
|
230
|
+
public:
|
231
|
+
ExtendAcrossMedia(Backtraces traces, Extension extension);
|
232
|
+
virtual ~ExtendAcrossMedia() throw() {};
|
211
233
|
};
|
212
234
|
|
213
235
|
}
|
data/ext/libsass/src/eval.cpp
CHANGED
@@ -72,28 +72,11 @@ namespace Sass {
|
|
72
72
|
return exp.env_stack;
|
73
73
|
}
|
74
74
|
|
75
|
-
Selector_List_Obj Eval::selector()
|
76
|
-
{
|
77
|
-
return exp.selector();
|
78
|
-
}
|
79
|
-
|
80
75
|
std::vector<Sass_Callee>& Eval::callee_stack()
|
81
76
|
{
|
82
77
|
return ctx.callee_stack;
|
83
78
|
}
|
84
79
|
|
85
|
-
|
86
|
-
SelectorStack& Eval::selector_stack()
|
87
|
-
{
|
88
|
-
return exp.selector_stack;
|
89
|
-
}
|
90
|
-
|
91
|
-
bool& Eval::old_at_root_without_rule()
|
92
|
-
{
|
93
|
-
return exp.old_at_root_without_rule;
|
94
|
-
}
|
95
|
-
|
96
|
-
|
97
80
|
Expression* Eval::operator()(Block* b)
|
98
81
|
{
|
99
82
|
Expression* val = 0;
|
@@ -251,9 +234,8 @@ namespace Sass {
|
|
251
234
|
if (expr->concrete_type() == Expression::MAP) {
|
252
235
|
map = Cast<Map>(expr);
|
253
236
|
}
|
254
|
-
else if (
|
255
|
-
Listize
|
256
|
-
Expression_Obj rv = ls->perform(&listize);
|
237
|
+
else if (SelectorList * ls = Cast<SelectorList>(expr)) {
|
238
|
+
Expression_Obj rv = Listize::perform(ls);
|
257
239
|
list = Cast<List>(rv);
|
258
240
|
}
|
259
241
|
else if (expr->concrete_type() != Expression::LIST) {
|
@@ -286,7 +268,7 @@ namespace Sass {
|
|
286
268
|
}
|
287
269
|
}
|
288
270
|
else {
|
289
|
-
if (list->length() == 1 && Cast<
|
271
|
+
if (list->length() == 1 && Cast<SelectorList>(list)) {
|
290
272
|
list = Cast<List>(list);
|
291
273
|
}
|
292
274
|
for (size_t i = 0, L = list->length(); i < L; ++i) {
|
@@ -490,6 +472,7 @@ namespace Sass {
|
|
490
472
|
return 0;
|
491
473
|
}
|
492
474
|
|
475
|
+
|
493
476
|
Expression* Eval::operator()(List* l)
|
494
477
|
{
|
495
478
|
// special case for unevaluated map
|
@@ -707,9 +690,9 @@ namespace Sass {
|
|
707
690
|
b->op(), s_l->last(), b->right());
|
708
691
|
bin_ex->is_delayed(b->left()->is_delayed() || b->right()->is_delayed()); // unverified
|
709
692
|
for (size_t i = 0; i < s_l->length() - 1; ++i) {
|
710
|
-
ret_schema->append(
|
693
|
+
ret_schema->append(s_l->at(i)->perform(this));
|
711
694
|
}
|
712
|
-
ret_schema->append(
|
695
|
+
ret_schema->append(bin_ex->perform(this));
|
713
696
|
return ret_schema->perform(this);
|
714
697
|
}
|
715
698
|
}
|
@@ -720,9 +703,9 @@ namespace Sass {
|
|
720
703
|
Binary_Expression_Obj bin_ex = SASS_MEMORY_NEW(Binary_Expression, b->pstate(),
|
721
704
|
b->op(), b->left(), s_r->first());
|
722
705
|
bin_ex->is_delayed(b->left()->is_delayed() || b->right()->is_delayed()); // verified
|
723
|
-
ret_schema->append(
|
706
|
+
ret_schema->append(bin_ex->perform(this));
|
724
707
|
for (size_t i = 1; i < s_r->length(); ++i) {
|
725
|
-
ret_schema->append(
|
708
|
+
ret_schema->append(s_r->at(i)->perform(this));
|
726
709
|
}
|
727
710
|
return ret_schema->perform(this);
|
728
711
|
}
|
@@ -933,7 +916,7 @@ namespace Sass {
|
|
933
916
|
return nr.detach();
|
934
917
|
}
|
935
918
|
else {
|
936
|
-
// Special cases: +/- variables which evaluate to null
|
919
|
+
// Special cases: +/- variables which evaluate to null output just +/-,
|
937
920
|
// but +/- null itself outputs the string
|
938
921
|
if (operand->concrete_type() == Expression::NULL_VAL && Cast<Variable>(u->operand())) {
|
939
922
|
u->operand(SASS_MEMORY_NEW(String_Quoted, u->pstate(), ""));
|
@@ -942,12 +925,19 @@ namespace Sass {
|
|
942
925
|
else if (Color* color = Cast<Color>(operand)) {
|
943
926
|
// Use the color name if this was eval with one
|
944
927
|
if (color->disp().length() > 0) {
|
945
|
-
|
946
|
-
|
928
|
+
Unary_Expression_Obj cpy = SASS_MEMORY_COPY(u);
|
929
|
+
cpy->operand(SASS_MEMORY_NEW(String_Constant, operand->pstate(), color->disp()));
|
930
|
+
return SASS_MEMORY_NEW(String_Quoted,
|
931
|
+
cpy->pstate(),
|
932
|
+
cpy->inspect());
|
947
933
|
}
|
948
934
|
}
|
949
935
|
else {
|
950
|
-
u
|
936
|
+
Unary_Expression_Obj cpy = SASS_MEMORY_COPY(u);
|
937
|
+
cpy->operand(operand);
|
938
|
+
return SASS_MEMORY_NEW(String_Quoted,
|
939
|
+
cpy->pstate(),
|
940
|
+
cpy->inspect());
|
951
941
|
}
|
952
942
|
|
953
943
|
return SASS_MEMORY_NEW(String_Quoted,
|
@@ -995,7 +985,7 @@ namespace Sass {
|
|
995
985
|
c->name(),
|
996
986
|
args);
|
997
987
|
if (args->has_named_arguments()) {
|
998
|
-
error("
|
988
|
+
error("Plain CSS function " + c->name() + " doesn't support keyword arguments", c->pstate(), traces);
|
999
989
|
}
|
1000
990
|
String_Quoted* str = SASS_MEMORY_NEW(String_Quoted,
|
1001
991
|
c->pstate(),
|
@@ -1065,7 +1055,7 @@ namespace Sass {
|
|
1065
1055
|
result = body->perform(this);
|
1066
1056
|
}
|
1067
1057
|
else if (func) {
|
1068
|
-
result = func(fn_env, *env, ctx, def->signature(), c->pstate(), traces, exp.
|
1058
|
+
result = func(fn_env, *env, ctx, def->signature(), c->pstate(), traces, exp.getSelectorStack(), exp.originalStack);
|
1069
1059
|
}
|
1070
1060
|
if (!result) {
|
1071
1061
|
error(std::string("Function ") + c->name() + " finished without @return", c->pstate(), traces);
|
@@ -1214,11 +1204,6 @@ namespace Sass {
|
|
1214
1204
|
|
1215
1205
|
if (Cast<Null>(ex)) { return; }
|
1216
1206
|
|
1217
|
-
// parent selector needs another go
|
1218
|
-
if (Cast<Parent_Selector>(ex)) {
|
1219
|
-
// XXX: this is never hit via spec tests
|
1220
|
-
ex = ex->perform(this);
|
1221
|
-
}
|
1222
1207
|
// parent selector needs another go
|
1223
1208
|
if (Cast<Parent_Reference>(ex)) {
|
1224
1209
|
// XXX: this is never hit via spec tests
|
@@ -1254,7 +1239,6 @@ namespace Sass {
|
|
1254
1239
|
// Selector_List
|
1255
1240
|
// String_Quoted
|
1256
1241
|
// String_Constant
|
1257
|
-
// Parent_Selector
|
1258
1242
|
// Binary_Expression
|
1259
1243
|
else {
|
1260
1244
|
// ex = ex->perform(this);
|
@@ -1512,69 +1496,7 @@ namespace Sass {
|
|
1512
1496
|
return 0;
|
1513
1497
|
}
|
1514
1498
|
|
1515
|
-
|
1516
|
-
{
|
1517
|
-
SelectorStack rv;
|
1518
|
-
Selector_List_Obj sl = SASS_MEMORY_NEW(Selector_List, s->pstate());
|
1519
|
-
sl->is_optional(s->is_optional());
|
1520
|
-
sl->media_block(s->media_block());
|
1521
|
-
sl->is_optional(s->is_optional());
|
1522
|
-
for (size_t i = 0, iL = s->length(); i < iL; ++i) {
|
1523
|
-
rv.push_back(operator()((*s)[i]));
|
1524
|
-
}
|
1525
|
-
|
1526
|
-
// we should actually permutate parent first
|
1527
|
-
// but here we have permutated the selector first
|
1528
|
-
size_t round = 0;
|
1529
|
-
while (round != std::string::npos) {
|
1530
|
-
bool abort = true;
|
1531
|
-
for (size_t i = 0, iL = rv.size(); i < iL; ++i) {
|
1532
|
-
if (rv[i]->length() > round) {
|
1533
|
-
sl->append((*rv[i])[round]);
|
1534
|
-
abort = false;
|
1535
|
-
}
|
1536
|
-
}
|
1537
|
-
if (abort) {
|
1538
|
-
round = std::string::npos;
|
1539
|
-
} else {
|
1540
|
-
++ round;
|
1541
|
-
}
|
1542
|
-
|
1543
|
-
}
|
1544
|
-
return sl.detach();
|
1545
|
-
}
|
1546
|
-
|
1547
|
-
|
1548
|
-
Selector_List* Eval::operator()(Complex_Selector* s)
|
1549
|
-
{
|
1550
|
-
bool implicit_parent = !exp.old_at_root_without_rule;
|
1551
|
-
if (is_in_selector_schema) exp.selector_stack.push_back({});
|
1552
|
-
Selector_List_Obj resolved = s->resolve_parent_refs(exp.selector_stack, traces, implicit_parent);
|
1553
|
-
if (is_in_selector_schema) exp.selector_stack.pop_back();
|
1554
|
-
for (size_t i = 0; i < resolved->length(); i++) {
|
1555
|
-
Complex_Selector* is = resolved->at(i)->mutable_first();
|
1556
|
-
while (is) {
|
1557
|
-
if (is->head()) {
|
1558
|
-
is->head(operator()(is->head()));
|
1559
|
-
}
|
1560
|
-
is = is->tail();
|
1561
|
-
}
|
1562
|
-
}
|
1563
|
-
return resolved.detach();
|
1564
|
-
}
|
1565
|
-
|
1566
|
-
Compound_Selector* Eval::operator()(Compound_Selector* s)
|
1567
|
-
{
|
1568
|
-
for (size_t i = 0; i < s->length(); i++) {
|
1569
|
-
Simple_Selector* ss = s->at(i);
|
1570
|
-
// skip parents here (called via resolve_parent_refs)
|
1571
|
-
if (ss == NULL || Cast<Parent_Selector>(ss)) continue;
|
1572
|
-
s->at(i) = Cast<Simple_Selector>(ss->perform(this));
|
1573
|
-
}
|
1574
|
-
return s;
|
1575
|
-
}
|
1576
|
-
|
1577
|
-
Selector_List* Eval::operator()(Selector_Schema* s)
|
1499
|
+
SelectorList* Eval::operator()(Selector_Schema* s)
|
1578
1500
|
{
|
1579
1501
|
LOCAL_FLAG(is_in_selector_schema, true);
|
1580
1502
|
// the parser will look for a brace to end the selector
|
@@ -1584,74 +1506,32 @@ namespace Sass {
|
|
1584
1506
|
char* temp_cstr = sass_copy_c_string(result_str.c_str());
|
1585
1507
|
ctx.strings.push_back(temp_cstr); // attach to context
|
1586
1508
|
Parser p = Parser::from_c_str(temp_cstr, ctx, traces, s->pstate());
|
1587
|
-
p.last_media_block = s->media_block();
|
1588
|
-
// a selector schema may or may not connect to parent?
|
1589
|
-
bool chroot = s->connect_parent() == false;
|
1590
|
-
Selector_List_Obj sl = p.parse_selector_list(chroot);
|
1591
|
-
flag_is_in_selector_schema.reset();
|
1592
|
-
return operator()(sl);
|
1593
|
-
}
|
1594
1509
|
|
1595
|
-
|
1596
|
-
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1600
|
-
exp.selector_stack.push_back(rv);
|
1601
|
-
return rv.detach();
|
1602
|
-
} else {
|
1603
|
-
return SASS_MEMORY_NEW(Null, p->pstate());
|
1604
|
-
}
|
1510
|
+
// If a schema contains a reference to parent it is already
|
1511
|
+
// connected to it, so don't connect implicitly anymore
|
1512
|
+
SelectorListObj parsed = p.parseSelectorList(true);
|
1513
|
+
flag_is_in_selector_schema.reset();
|
1514
|
+
return parsed.detach();
|
1605
1515
|
}
|
1606
1516
|
|
1607
1517
|
Expression* Eval::operator()(Parent_Reference* p)
|
1608
1518
|
{
|
1609
|
-
if (
|
1610
|
-
|
1611
|
-
Selector_List_Obj rv = operator()(pr);
|
1612
|
-
exp.selector_stack.push_back(rv);
|
1613
|
-
return rv.detach();
|
1519
|
+
if (SelectorListObj pr = exp.original()) {
|
1520
|
+
return operator()(pr);
|
1614
1521
|
} else {
|
1615
1522
|
return SASS_MEMORY_NEW(Null, p->pstate());
|
1616
1523
|
}
|
1617
1524
|
}
|
1618
1525
|
|
1619
|
-
|
1526
|
+
SimpleSelector* Eval::operator()(SimpleSelector* s)
|
1620
1527
|
{
|
1621
1528
|
return s;
|
1622
1529
|
}
|
1623
1530
|
|
1624
|
-
|
1625
|
-
// probably the wrong place, but this should ultimately
|
1626
|
-
// be fixed by implement superselector correctly for `:not`
|
1627
|
-
// first use of "find" (ATM only implemented for selectors)
|
1628
|
-
bool hasNotSelector(AST_Node_Obj obj) {
|
1629
|
-
if (Wrapped_Selector* w = Cast<Wrapped_Selector>(obj)) {
|
1630
|
-
return w->name() == ":not";
|
1631
|
-
}
|
1632
|
-
return false;
|
1633
|
-
}
|
1634
|
-
|
1635
|
-
Wrapped_Selector* Eval::operator()(Wrapped_Selector* s)
|
1531
|
+
Pseudo_Selector* Eval::operator()(Pseudo_Selector* pseudo)
|
1636
1532
|
{
|
1637
|
-
|
1638
|
-
|
1639
|
-
if (exp.selector_stack.back()) {
|
1640
|
-
if (s->selector()->find(hasNotSelector)) {
|
1641
|
-
s->selector()->clear();
|
1642
|
-
s->name(" ");
|
1643
|
-
} else {
|
1644
|
-
for (size_t i = 0; i < s->selector()->length(); ++i) {
|
1645
|
-
Complex_Selector* cs = s->selector()->at(i);
|
1646
|
-
if (cs->tail()) {
|
1647
|
-
s->selector()->clear();
|
1648
|
-
s->name(" ");
|
1649
|
-
}
|
1650
|
-
}
|
1651
|
-
}
|
1652
|
-
}
|
1653
|
-
}
|
1654
|
-
return s;
|
1533
|
+
// ToDo: should we eval selector?
|
1534
|
+
return pseudo;
|
1655
1535
|
};
|
1656
1536
|
|
1657
1537
|
}
|
data/ext/libsass/src/eval.hpp
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
#ifndef SASS_EVAL_H
|
2
2
|
#define SASS_EVAL_H
|
3
3
|
|
4
|
+
// sass.hpp must go before all system headers to get the
|
5
|
+
// __EXTENSIONS__ fix on Solaris.
|
6
|
+
#include "sass.hpp"
|
4
7
|
#include "ast.hpp"
|
8
|
+
|
5
9
|
#include "context.hpp"
|
6
10
|
#include "listize.hpp"
|
7
11
|
#include "operation.hpp"
|
@@ -31,12 +35,8 @@ namespace Sass {
|
|
31
35
|
Env* environment();
|
32
36
|
EnvStack& env_stack();
|
33
37
|
const std::string cwd();
|
34
|
-
Selector_List_Obj selector();
|
35
38
|
CalleeStack& callee_stack();
|
36
|
-
SelectorStack& selector_stack();
|
37
|
-
bool& old_at_root_without_rule();
|
38
39
|
struct Sass_Inspect_Options& options();
|
39
|
-
struct Sass_Inspect_Options options2();
|
40
40
|
struct Sass_Compiler* compiler();
|
41
41
|
|
42
42
|
// for evaluating function bodies
|
@@ -64,7 +64,6 @@ namespace Sass {
|
|
64
64
|
Expression* operator()(String_Schema*);
|
65
65
|
Expression* operator()(String_Quoted*);
|
66
66
|
Expression* operator()(String_Constant*);
|
67
|
-
// Expression* operator()(Selector_List*);
|
68
67
|
Media_Query* operator()(Media_Query*);
|
69
68
|
Expression* operator()(Media_Query_Expression*);
|
70
69
|
Expression* operator()(At_Root_Query*);
|
@@ -78,23 +77,22 @@ namespace Sass {
|
|
78
77
|
Expression* operator()(Comment*);
|
79
78
|
|
80
79
|
// these will return selectors
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
80
|
+
SelectorList* operator()(SelectorList*);
|
81
|
+
SelectorList* operator()(ComplexSelector*);
|
82
|
+
CompoundSelector* operator()(CompoundSelector*);
|
83
|
+
SelectorComponent* operator()(SelectorComponent*);
|
84
|
+
SimpleSelector* operator()(SimpleSelector* s);
|
85
|
+
Pseudo_Selector* operator()(Pseudo_Selector* s);
|
86
86
|
|
87
87
|
// they don't have any specific implementation (yet)
|
88
88
|
Id_Selector* operator()(Id_Selector* s) { return s; };
|
89
89
|
Class_Selector* operator()(Class_Selector* s) { return s; };
|
90
|
-
Pseudo_Selector* operator()(Pseudo_Selector* s) { return s; };
|
91
90
|
Type_Selector* operator()(Type_Selector* s) { return s; };
|
92
91
|
Attribute_Selector* operator()(Attribute_Selector* s) { return s; };
|
93
92
|
Placeholder_Selector* operator()(Placeholder_Selector* s) { return s; };
|
94
93
|
|
95
94
|
// actual evaluated selectors
|
96
|
-
|
97
|
-
Expression* operator()(Parent_Selector*);
|
95
|
+
SelectorList* operator()(Selector_Schema*);
|
98
96
|
Expression* operator()(Parent_Reference*);
|
99
97
|
|
100
98
|
// generic fallback
|