sassc 2.1.0.pre3 → 2.4.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 +2 -0
- data/CHANGELOG.md +24 -0
- data/Rakefile +2 -4
- 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 +4 -0
- data/ext/libsass/src/MurmurHash2.hpp +91 -0
- data/ext/libsass/src/ast.cpp +158 -168
- data/ext/libsass/src/ast.hpp +389 -230
- data/ext/libsass/src/ast_def_macros.hpp +18 -10
- data/ext/libsass/src/ast_fwd_decl.cpp +4 -3
- data/ext/libsass/src/ast_fwd_decl.hpp +98 -165
- data/ext/libsass/src/ast_helpers.hpp +292 -0
- data/ext/libsass/src/ast_sel_cmp.cpp +219 -732
- 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 +594 -1026
- data/ext/libsass/src/ast_selectors.hpp +339 -385
- data/ext/libsass/src/ast_supports.cpp +36 -52
- data/ext/libsass/src/ast_supports.hpp +29 -29
- data/ext/libsass/src/ast_values.cpp +271 -84
- data/ext/libsass/src/ast_values.hpp +116 -107
- data/ext/libsass/src/backtrace.cpp +9 -9
- data/ext/libsass/src/backtrace.hpp +5 -5
- data/ext/libsass/src/base64vlq.cpp +2 -2
- data/ext/libsass/src/base64vlq.hpp +1 -1
- data/ext/libsass/src/bind.cpp +18 -18
- data/ext/libsass/src/bind.hpp +1 -1
- data/ext/libsass/src/c2ast.cpp +3 -3
- data/ext/libsass/src/c2ast.hpp +1 -1
- data/ext/libsass/src/cencode.c +4 -6
- data/ext/libsass/src/check_nesting.cpp +40 -41
- data/ext/libsass/src/check_nesting.hpp +6 -2
- data/ext/libsass/src/color_maps.cpp +14 -13
- data/ext/libsass/src/color_maps.hpp +1 -9
- data/ext/libsass/src/constants.cpp +5 -0
- data/ext/libsass/src/constants.hpp +6 -0
- data/ext/libsass/src/context.cpp +92 -119
- data/ext/libsass/src/context.hpp +41 -53
- data/ext/libsass/src/cssize.cpp +66 -149
- data/ext/libsass/src/cssize.hpp +17 -23
- data/ext/libsass/src/dart_helpers.hpp +199 -0
- data/ext/libsass/src/debugger.hpp +451 -295
- data/ext/libsass/src/emitter.cpp +15 -16
- data/ext/libsass/src/emitter.hpp +10 -12
- data/ext/libsass/src/environment.cpp +27 -27
- data/ext/libsass/src/environment.hpp +29 -24
- data/ext/libsass/src/error_handling.cpp +62 -41
- data/ext/libsass/src/error_handling.hpp +61 -51
- data/ext/libsass/src/eval.cpp +167 -281
- data/ext/libsass/src/eval.hpp +27 -29
- data/ext/libsass/src/eval_selectors.cpp +75 -0
- data/ext/libsass/src/expand.cpp +275 -222
- data/ext/libsass/src/expand.hpp +36 -16
- data/ext/libsass/src/extender.cpp +1188 -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 +81 -72
- data/ext/libsass/src/file.hpp +28 -37
- data/ext/libsass/src/fn_colors.cpp +20 -18
- data/ext/libsass/src/fn_lists.cpp +30 -29
- data/ext/libsass/src/fn_maps.cpp +3 -3
- data/ext/libsass/src/fn_miscs.cpp +34 -46
- data/ext/libsass/src/fn_numbers.cpp +20 -13
- data/ext/libsass/src/fn_selectors.cpp +98 -128
- data/ext/libsass/src/fn_strings.cpp +47 -33
- data/ext/libsass/src/fn_utils.cpp +31 -29
- data/ext/libsass/src/fn_utils.hpp +17 -11
- data/ext/libsass/src/inspect.cpp +186 -148
- data/ext/libsass/src/inspect.hpp +31 -29
- data/ext/libsass/src/lexer.cpp +20 -82
- data/ext/libsass/src/lexer.hpp +5 -16
- data/ext/libsass/src/listize.cpp +23 -37
- data/ext/libsass/src/listize.hpp +8 -9
- data/ext/libsass/src/mapping.hpp +1 -0
- data/ext/libsass/src/memory.hpp +12 -0
- data/ext/libsass/src/memory/allocator.cpp +48 -0
- data/ext/libsass/src/memory/allocator.hpp +138 -0
- data/ext/libsass/src/memory/config.hpp +20 -0
- data/ext/libsass/src/memory/memory_pool.hpp +186 -0
- data/ext/libsass/src/memory/{SharedPtr.cpp → shared_ptr.cpp} +2 -2
- data/ext/libsass/src/memory/{SharedPtr.hpp → shared_ptr.hpp} +55 -9
- data/ext/libsass/src/operation.hpp +71 -61
- data/ext/libsass/src/operators.cpp +19 -18
- data/ext/libsass/src/operators.hpp +11 -11
- data/ext/libsass/src/ordered_map.hpp +112 -0
- data/ext/libsass/src/output.cpp +45 -64
- data/ext/libsass/src/output.hpp +6 -6
- data/ext/libsass/src/parser.cpp +512 -700
- data/ext/libsass/src/parser.hpp +89 -97
- data/ext/libsass/src/parser_selectors.cpp +189 -0
- data/ext/libsass/src/permutate.hpp +164 -0
- data/ext/libsass/src/plugins.cpp +7 -7
- data/ext/libsass/src/plugins.hpp +8 -8
- data/ext/libsass/src/position.cpp +7 -26
- data/ext/libsass/src/position.hpp +44 -21
- 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.cpp +16 -15
- data/ext/libsass/src/sass.hpp +10 -5
- data/ext/libsass/src/sass2scss.cpp +4 -4
- data/ext/libsass/src/sass_context.cpp +91 -122
- 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 +8 -11
- data/ext/libsass/src/settings.hpp +19 -0
- data/ext/libsass/src/source.cpp +69 -0
- data/ext/libsass/src/source.hpp +95 -0
- data/ext/libsass/src/source_data.hpp +32 -0
- data/ext/libsass/src/source_map.cpp +22 -18
- data/ext/libsass/src/source_map.hpp +12 -9
- 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 +24 -22
- data/ext/libsass/src/units.hpp +8 -8
- data/ext/libsass/src/utf8_string.cpp +9 -10
- data/ext/libsass/src/utf8_string.hpp +7 -6
- data/ext/libsass/src/util.cpp +48 -50
- data/ext/libsass/src/util.hpp +20 -21
- data/ext/libsass/src/util_string.cpp +111 -61
- data/ext/libsass/src/util_string.hpp +62 -8
- data/ext/libsass/src/values.cpp +12 -12
- data/lib/sassc/engine.rb +5 -3
- data/lib/sassc/functions_handler.rb +11 -13
- data/lib/sassc/native.rb +9 -7
- data/lib/sassc/script.rb +4 -6
- data/lib/sassc/version.rb +1 -1
- data/test/functions_test.rb +38 -1
- data/test/native_test.rb +4 -4
- metadata +31 -18
- 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/lib/sassc/native/lib_c.rb +0 -21
@@ -2,20 +2,20 @@
|
|
2
2
|
|
3
3
|
namespace Sass {
|
4
4
|
|
5
|
-
const
|
5
|
+
const sass::string traces_to_string(Backtraces traces, sass::string indent) {
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
sass::ostream ss;
|
8
|
+
sass::string cwd(File::get_cwd());
|
9
9
|
|
10
10
|
bool first = true;
|
11
11
|
size_t i_beg = traces.size() - 1;
|
12
|
-
size_t i_end =
|
12
|
+
size_t i_end = sass::string::npos;
|
13
13
|
for (size_t i = i_beg; i != i_end; i --) {
|
14
14
|
|
15
15
|
const Backtrace& trace = traces[i];
|
16
16
|
|
17
17
|
// make path relative to the current directory
|
18
|
-
|
18
|
+
sass::string rel_path(File::abs2rel(trace.pstate.getPath(), cwd, cwd));
|
19
19
|
|
20
20
|
// skip functions on error cases (unsure why ruby sass does this)
|
21
21
|
// if (trace.caller.substr(0, 6) == ", in f") continue;
|
@@ -23,9 +23,9 @@ namespace Sass {
|
|
23
23
|
if (first) {
|
24
24
|
ss << indent;
|
25
25
|
ss << "on line ";
|
26
|
-
ss << trace.pstate.
|
26
|
+
ss << trace.pstate.getLine();
|
27
27
|
ss << ":";
|
28
|
-
ss << trace.pstate.
|
28
|
+
ss << trace.pstate.getColumn();
|
29
29
|
ss << " of " << rel_path;
|
30
30
|
// ss << trace.caller;
|
31
31
|
first = false;
|
@@ -34,9 +34,9 @@ namespace Sass {
|
|
34
34
|
ss << std::endl;
|
35
35
|
ss << indent;
|
36
36
|
ss << "from line ";
|
37
|
-
ss << trace.pstate.
|
37
|
+
ss << trace.pstate.getLine();
|
38
38
|
ss << ":";
|
39
|
-
ss << trace.pstate.
|
39
|
+
ss << trace.pstate.getColumn();
|
40
40
|
ss << " of " << rel_path;
|
41
41
|
}
|
42
42
|
|
@@ -10,19 +10,19 @@ namespace Sass {
|
|
10
10
|
|
11
11
|
struct Backtrace {
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
SourceSpan pstate;
|
14
|
+
sass::string caller;
|
15
15
|
|
16
|
-
Backtrace(
|
16
|
+
Backtrace(SourceSpan pstate, sass::string c = "")
|
17
17
|
: pstate(pstate),
|
18
18
|
caller(c)
|
19
19
|
{ }
|
20
20
|
|
21
21
|
};
|
22
22
|
|
23
|
-
typedef
|
23
|
+
typedef sass::vector<Backtrace> Backtraces;
|
24
24
|
|
25
|
-
const
|
25
|
+
const sass::string traces_to_string(Backtraces traces, sass::string indent = "\t");
|
26
26
|
|
27
27
|
}
|
28
28
|
|
data/ext/libsass/src/bind.cpp
CHANGED
@@ -11,11 +11,11 @@
|
|
11
11
|
|
12
12
|
namespace Sass {
|
13
13
|
|
14
|
-
void bind(
|
14
|
+
void bind(sass::string type, sass::string name, Parameters_Obj ps, Arguments_Obj as, Env* env, Eval* eval, Backtraces& traces)
|
15
15
|
{
|
16
|
-
|
16
|
+
sass::string callee(type + " " + name);
|
17
17
|
|
18
|
-
std::map<
|
18
|
+
std::map<sass::string, Parameter_Obj> param_map;
|
19
19
|
List_Obj varargs = SASS_MEMORY_NEW(List, as->pstate());
|
20
20
|
varargs->is_arglist(true); // enable keyword size handling
|
21
21
|
|
@@ -52,7 +52,7 @@ namespace Sass {
|
|
52
52
|
}
|
53
53
|
}
|
54
54
|
}
|
55
|
-
|
55
|
+
sass::ostream msg;
|
56
56
|
msg << "wrong number of arguments (" << LA << " for " << LP << ")";
|
57
57
|
msg << " for `" << name << "'";
|
58
58
|
return error(msg.str(), as->pstate(), traces);
|
@@ -73,7 +73,7 @@ namespace Sass {
|
|
73
73
|
rest->separator(),
|
74
74
|
true);
|
75
75
|
// wrap each item from list as an argument
|
76
|
-
for (
|
76
|
+
for (ExpressionObj item : rest->elements()) {
|
77
77
|
if (Argument_Obj arg = Cast<Argument>(item)) {
|
78
78
|
arglist->append(SASS_MEMORY_COPY(arg)); // copy
|
79
79
|
} else {
|
@@ -100,7 +100,7 @@ namespace Sass {
|
|
100
100
|
Map_Obj argmap = Cast<Map>(a->value());
|
101
101
|
for (auto key : argmap->keys()) {
|
102
102
|
if (String_Constant_Obj str = Cast<String_Constant>(key)) {
|
103
|
-
|
103
|
+
sass::string param = unquote(str->value());
|
104
104
|
arglist->append(SASS_MEMORY_NEW(Argument,
|
105
105
|
key->pstate(),
|
106
106
|
argmap->at(key),
|
@@ -130,7 +130,7 @@ namespace Sass {
|
|
130
130
|
// skip any list completely if empty
|
131
131
|
if (ls && ls->empty() && a->is_rest_argument()) continue;
|
132
132
|
|
133
|
-
|
133
|
+
ExpressionObj value = a->value();
|
134
134
|
if (Argument_Obj arg = Cast<Argument>(value)) {
|
135
135
|
arglist->append(arg);
|
136
136
|
}
|
@@ -141,7 +141,7 @@ namespace Sass {
|
|
141
141
|
arglist->separator(rest->separator());
|
142
142
|
|
143
143
|
for (size_t i = 0, L = rest->length(); i < L; ++i) {
|
144
|
-
|
144
|
+
ExpressionObj obj = rest->value_at_index(i);
|
145
145
|
arglist->append(SASS_MEMORY_NEW(Argument,
|
146
146
|
obj->pstate(),
|
147
147
|
obj,
|
@@ -168,7 +168,7 @@ namespace Sass {
|
|
168
168
|
}
|
169
169
|
// consumed parameter
|
170
170
|
++ip;
|
171
|
-
// no more
|
171
|
+
// no more parameters
|
172
172
|
break;
|
173
173
|
}
|
174
174
|
|
@@ -177,7 +177,7 @@ namespace Sass {
|
|
177
177
|
// normal param and rest arg
|
178
178
|
List_Obj arglist = Cast<List>(a->value());
|
179
179
|
if (!arglist) {
|
180
|
-
if (
|
180
|
+
if (ExpressionObj arg = Cast<Expression>(a->value())) {
|
181
181
|
arglist = SASS_MEMORY_NEW(List, a->pstate(), 1);
|
182
182
|
arglist->append(arg);
|
183
183
|
}
|
@@ -189,7 +189,7 @@ namespace Sass {
|
|
189
189
|
} else {
|
190
190
|
if (arglist->length() > LP - ip && !ps->has_rest_parameter()) {
|
191
191
|
size_t arg_count = (arglist->length() + LA - 1);
|
192
|
-
|
192
|
+
sass::ostream msg;
|
193
193
|
msg << callee << " takes " << LP;
|
194
194
|
msg << (LP == 1 ? " argument" : " arguments");
|
195
195
|
msg << " but " << arg_count;
|
@@ -202,7 +202,7 @@ namespace Sass {
|
|
202
202
|
}
|
203
203
|
}
|
204
204
|
// otherwise move one of the rest args into the param, converting to argument if necessary
|
205
|
-
|
205
|
+
ExpressionObj obj = arglist->at(0);
|
206
206
|
if (!(a = Cast<Argument>(obj))) {
|
207
207
|
Expression* a_to_convert = obj;
|
208
208
|
a = SASS_MEMORY_NEW(Argument,
|
@@ -226,10 +226,10 @@ namespace Sass {
|
|
226
226
|
traces.push_back(Backtrace(key->pstate()));
|
227
227
|
throw Exception::InvalidVarKwdType(key->pstate(), traces, key->inspect(), a);
|
228
228
|
}
|
229
|
-
|
229
|
+
sass::string param = "$" + unquote(val->value());
|
230
230
|
|
231
231
|
if (!param_map.count(param)) {
|
232
|
-
|
232
|
+
sass::ostream msg;
|
233
233
|
msg << callee << " has no parameter named " << param;
|
234
234
|
error(msg.str(), a->pstate(), traces);
|
235
235
|
}
|
@@ -243,7 +243,7 @@ namespace Sass {
|
|
243
243
|
|
244
244
|
if (a->name().empty()) {
|
245
245
|
if (env->has_local(p->name())) {
|
246
|
-
|
246
|
+
sass::ostream msg;
|
247
247
|
msg << "parameter " << p->name()
|
248
248
|
<< " provided more than once in call to " << callee;
|
249
249
|
error(msg.str(), a->pstate(), traces);
|
@@ -258,21 +258,21 @@ namespace Sass {
|
|
258
258
|
if (ps->has_rest_parameter()) {
|
259
259
|
varargs->append(a);
|
260
260
|
} else {
|
261
|
-
|
261
|
+
sass::ostream msg;
|
262
262
|
msg << callee << " has no parameter named " << a->name();
|
263
263
|
error(msg.str(), a->pstate(), traces);
|
264
264
|
}
|
265
265
|
}
|
266
266
|
if (param_map[a->name()]) {
|
267
267
|
if (param_map[a->name()]->is_rest_parameter()) {
|
268
|
-
|
268
|
+
sass::ostream msg;
|
269
269
|
msg << "argument " << a->name() << " of " << callee
|
270
270
|
<< "cannot be used as named argument";
|
271
271
|
error(msg.str(), a->pstate(), traces);
|
272
272
|
}
|
273
273
|
}
|
274
274
|
if (env->has_local(a->name())) {
|
275
|
-
|
275
|
+
sass::ostream msg;
|
276
276
|
msg << "parameter " << p->name()
|
277
277
|
<< "provided more than once in call to " << callee;
|
278
278
|
error(msg.str(), a->pstate(), traces);
|
data/ext/libsass/src/bind.hpp
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
namespace Sass {
|
10
10
|
|
11
|
-
void bind(
|
11
|
+
void bind(sass::string type, sass::string name, Parameters_Obj, Arguments_Obj, Env*, Eval*, Backtraces& traces);
|
12
12
|
|
13
13
|
}
|
14
14
|
|
data/ext/libsass/src/c2ast.cpp
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
namespace Sass {
|
10
10
|
|
11
|
-
Value* c2ast(union Sass_Value* v, Backtraces traces,
|
11
|
+
Value* c2ast(union Sass_Value* v, Backtraces traces, SourceSpan pstate)
|
12
12
|
{
|
13
13
|
using std::strlen;
|
14
14
|
using std::strcpy;
|
@@ -51,10 +51,10 @@ namespace Sass {
|
|
51
51
|
e = SASS_MEMORY_NEW(Null, pstate);
|
52
52
|
} break;
|
53
53
|
case SASS_ERROR: {
|
54
|
-
error("Error in C function: " +
|
54
|
+
error("Error in C function: " + sass::string(sass_error_get_message(v)), pstate, traces);
|
55
55
|
} break;
|
56
56
|
case SASS_WARNING: {
|
57
|
-
error("Warning in C function: " +
|
57
|
+
error("Warning in C function: " + sass::string(sass_warning_get_message(v)), pstate, traces);
|
58
58
|
} break;
|
59
59
|
default: break;
|
60
60
|
}
|
data/ext/libsass/src/c2ast.hpp
CHANGED
data/ext/libsass/src/cencode.c
CHANGED
@@ -46,9 +46,8 @@ int base64_encode_block(const char* plaintext_in, int length_in, char* code_out,
|
|
46
46
|
result = (fragment & 0x0fc) >> 2;
|
47
47
|
*codechar++ = base64_encode_value(result);
|
48
48
|
result = (fragment & 0x003) << 4;
|
49
|
-
|
50
|
-
|
51
|
-
#endif
|
49
|
+
/* fall through */
|
50
|
+
|
52
51
|
case step_B:
|
53
52
|
if (plainchar == plaintextend)
|
54
53
|
{
|
@@ -60,9 +59,8 @@ int base64_encode_block(const char* plaintext_in, int length_in, char* code_out,
|
|
60
59
|
result |= (fragment & 0x0f0) >> 4;
|
61
60
|
*codechar++ = base64_encode_value(result);
|
62
61
|
result = (fragment & 0x00f) << 2;
|
63
|
-
|
64
|
-
|
65
|
-
#endif
|
62
|
+
/* fall through */
|
63
|
+
|
66
64
|
case step_C:
|
67
65
|
if (plainchar == plaintextend)
|
68
66
|
{
|
@@ -1,20 +1,18 @@
|
|
1
1
|
// sass.hpp must go before all system headers to get the
|
2
2
|
// __EXTENSIONS__ fix on Solaris.
|
3
3
|
#include "sass.hpp"
|
4
|
-
|
5
|
-
#include <vector>
|
6
|
-
|
4
|
+
#include "ast.hpp"
|
7
5
|
#include "check_nesting.hpp"
|
8
6
|
|
9
7
|
namespace Sass {
|
10
8
|
|
11
9
|
CheckNesting::CheckNesting()
|
12
|
-
: parents(
|
13
|
-
traces(
|
10
|
+
: parents(sass::vector<Statement*>()),
|
11
|
+
traces(sass::vector<Backtrace>()),
|
14
12
|
parent(0), current_mixin_definition(0)
|
15
13
|
{ }
|
16
14
|
|
17
|
-
void error(AST_Node* node, Backtraces traces,
|
15
|
+
void error(AST_Node* node, Backtraces traces, sass::string msg) {
|
18
16
|
traces.push_back(Backtrace(node->pstate()));
|
19
17
|
throw Exception::InvalidSass(node->pstate(), traces, msg);
|
20
18
|
}
|
@@ -23,9 +21,9 @@ namespace Sass {
|
|
23
21
|
{
|
24
22
|
Statement* old_parent = this->parent;
|
25
23
|
|
26
|
-
if (
|
27
|
-
|
28
|
-
|
24
|
+
if (AtRootRule* root = Cast<AtRootRule>(parent)) {
|
25
|
+
sass::vector<Statement*> old_parents = this->parents;
|
26
|
+
sass::vector<Statement*> new_parents;
|
29
27
|
|
30
28
|
for (size_t i = 0, L = this->parents.size(); i < L; i++) {
|
31
29
|
Statement* p = this->parents.at(i);
|
@@ -47,7 +45,7 @@ namespace Sass {
|
|
47
45
|
}
|
48
46
|
}
|
49
47
|
|
50
|
-
|
48
|
+
AtRootRule* ar = Cast<AtRootRule>(parent);
|
51
49
|
Block* ret = ar->block();
|
52
50
|
|
53
51
|
if (ret != NULL) {
|
@@ -77,7 +75,7 @@ namespace Sass {
|
|
77
75
|
}
|
78
76
|
|
79
77
|
if (!b) {
|
80
|
-
if (
|
78
|
+
if (ParentStatement* bb = Cast<ParentStatement>(parent)) {
|
81
79
|
b = bb->block();
|
82
80
|
}
|
83
81
|
}
|
@@ -145,7 +143,7 @@ namespace Sass {
|
|
145
143
|
if (is_charset(node))
|
146
144
|
{ this->invalid_charset_parent(this->parent, node); }
|
147
145
|
|
148
|
-
if (Cast<
|
146
|
+
if (Cast<ExtendRule>(node))
|
149
147
|
{ this->invalid_extend_parent(this->parent, node); }
|
150
148
|
|
151
149
|
// if (Cast<Import>(node))
|
@@ -194,7 +192,7 @@ namespace Sass {
|
|
194
192
|
void CheckNesting::invalid_extend_parent(Statement* parent, AST_Node* node)
|
195
193
|
{
|
196
194
|
if (!(
|
197
|
-
Cast<
|
195
|
+
Cast<StyleRule>(parent) ||
|
198
196
|
Cast<Mixin_Call>(parent) ||
|
199
197
|
is_mixin(parent)
|
200
198
|
)) {
|
@@ -206,10 +204,10 @@ namespace Sass {
|
|
206
204
|
// {
|
207
205
|
// for (auto pp : this->parents) {
|
208
206
|
// if (
|
209
|
-
// Cast<
|
210
|
-
// Cast<
|
207
|
+
// Cast<EachRule>(pp) ||
|
208
|
+
// Cast<ForRule>(pp) ||
|
211
209
|
// Cast<If>(pp) ||
|
212
|
-
// Cast<
|
210
|
+
// Cast<WhileRule>(pp) ||
|
213
211
|
// Cast<Trace>(pp) ||
|
214
212
|
// Cast<Mixin_Call>(pp) ||
|
215
213
|
// is_mixin(pp)
|
@@ -231,10 +229,10 @@ namespace Sass {
|
|
231
229
|
{
|
232
230
|
for (Statement* pp : this->parents) {
|
233
231
|
if (
|
234
|
-
Cast<
|
235
|
-
Cast<
|
232
|
+
Cast<EachRule>(pp) ||
|
233
|
+
Cast<ForRule>(pp) ||
|
236
234
|
Cast<If>(pp) ||
|
237
|
-
Cast<
|
235
|
+
Cast<WhileRule>(pp) ||
|
238
236
|
Cast<Trace>(pp) ||
|
239
237
|
Cast<Mixin_Call>(pp) ||
|
240
238
|
is_mixin(pp)
|
@@ -248,10 +246,10 @@ namespace Sass {
|
|
248
246
|
{
|
249
247
|
for (Statement* pp : this->parents) {
|
250
248
|
if (
|
251
|
-
Cast<
|
252
|
-
Cast<
|
249
|
+
Cast<EachRule>(pp) ||
|
250
|
+
Cast<ForRule>(pp) ||
|
253
251
|
Cast<If>(pp) ||
|
254
|
-
Cast<
|
252
|
+
Cast<WhileRule>(pp) ||
|
255
253
|
Cast<Trace>(pp) ||
|
256
254
|
Cast<Mixin_Call>(pp) ||
|
257
255
|
is_mixin(pp)
|
@@ -264,19 +262,19 @@ namespace Sass {
|
|
264
262
|
void CheckNesting::invalid_function_child(Statement* child)
|
265
263
|
{
|
266
264
|
if (!(
|
267
|
-
Cast<
|
268
|
-
Cast<
|
265
|
+
Cast<EachRule>(child) ||
|
266
|
+
Cast<ForRule>(child) ||
|
269
267
|
Cast<If>(child) ||
|
270
|
-
Cast<
|
268
|
+
Cast<WhileRule>(child) ||
|
271
269
|
Cast<Trace>(child) ||
|
272
270
|
Cast<Comment>(child) ||
|
273
|
-
Cast<
|
271
|
+
Cast<DebugRule>(child) ||
|
274
272
|
Cast<Return>(child) ||
|
275
273
|
Cast<Variable>(child) ||
|
276
274
|
// Ruby Sass doesn't distinguish variables and assignments
|
277
275
|
Cast<Assignment>(child) ||
|
278
|
-
Cast<
|
279
|
-
Cast<
|
276
|
+
Cast<WarningRule>(child) ||
|
277
|
+
Cast<ErrorRule>(child)
|
280
278
|
)) {
|
281
279
|
error(child, traces, "Functions can only contain variable declarations and control directives.");
|
282
280
|
}
|
@@ -285,10 +283,10 @@ namespace Sass {
|
|
285
283
|
void CheckNesting::invalid_prop_child(Statement* child)
|
286
284
|
{
|
287
285
|
if (!(
|
288
|
-
Cast<
|
289
|
-
Cast<
|
286
|
+
Cast<EachRule>(child) ||
|
287
|
+
Cast<ForRule>(child) ||
|
290
288
|
Cast<If>(child) ||
|
291
|
-
Cast<
|
289
|
+
Cast<WhileRule>(child) ||
|
292
290
|
Cast<Trace>(child) ||
|
293
291
|
Cast<Comment>(child) ||
|
294
292
|
Cast<Declaration>(child) ||
|
@@ -303,7 +301,7 @@ namespace Sass {
|
|
303
301
|
if (!(
|
304
302
|
is_mixin(parent) ||
|
305
303
|
is_directive_node(parent) ||
|
306
|
-
Cast<
|
304
|
+
Cast<StyleRule>(parent) ||
|
307
305
|
Cast<Keyframe_Rule>(parent) ||
|
308
306
|
Cast<Declaration>(parent) ||
|
309
307
|
Cast<Mixin_Call>(parent)
|
@@ -345,17 +343,17 @@ namespace Sass {
|
|
345
343
|
!is_at_root_node(grandparent);
|
346
344
|
|
347
345
|
return Cast<Import>(parent) ||
|
348
|
-
Cast<
|
349
|
-
Cast<
|
346
|
+
Cast<EachRule>(parent) ||
|
347
|
+
Cast<ForRule>(parent) ||
|
350
348
|
Cast<If>(parent) ||
|
351
|
-
Cast<
|
349
|
+
Cast<WhileRule>(parent) ||
|
352
350
|
Cast<Trace>(parent) ||
|
353
351
|
valid_bubble_node;
|
354
352
|
}
|
355
353
|
|
356
354
|
bool CheckNesting::is_charset(Statement* n)
|
357
355
|
{
|
358
|
-
|
356
|
+
AtRule* d = Cast<AtRule>(n);
|
359
357
|
return d && d->keyword() == "charset";
|
360
358
|
}
|
361
359
|
|
@@ -373,7 +371,7 @@ namespace Sass {
|
|
373
371
|
|
374
372
|
bool CheckNesting::is_root_node(Statement* n)
|
375
373
|
{
|
376
|
-
if (Cast<
|
374
|
+
if (Cast<StyleRule>(n)) return false;
|
377
375
|
|
378
376
|
Block* b = Cast<Block>(n);
|
379
377
|
return b && b->is_root();
|
@@ -381,14 +379,15 @@ namespace Sass {
|
|
381
379
|
|
382
380
|
bool CheckNesting::is_at_root_node(Statement* n)
|
383
381
|
{
|
384
|
-
return Cast<
|
382
|
+
return Cast<AtRootRule>(n) != NULL;
|
385
383
|
}
|
386
384
|
|
387
385
|
bool CheckNesting::is_directive_node(Statement* n)
|
388
386
|
{
|
389
|
-
return Cast<
|
387
|
+
return Cast<AtRule>(n) ||
|
390
388
|
Cast<Import>(n) ||
|
391
|
-
|
392
|
-
|
389
|
+
Cast<MediaRule>(n) ||
|
390
|
+
Cast<CssMediaRule>(n) ||
|
391
|
+
Cast<SupportsRule>(n);
|
393
392
|
}
|
394
393
|
}
|