sassc 1.11.1 → 1.11.2
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 -2
- data/README.md +3 -2
- data/ext/libsass/Makefile.conf +2 -1
- data/ext/libsass/appveyor.yml +10 -5
- data/ext/libsass/docs/dev-ast-memory.md +223 -0
- data/ext/libsass/include/sass/base.h +2 -0
- data/ext/libsass/script/bootstrap +7 -4
- data/ext/libsass/script/ci-build-libsass +3 -3
- data/ext/libsass/script/ci-install-compiler +2 -0
- data/ext/libsass/script/ci-report-coverage +2 -1
- data/ext/libsass/script/test-leaks.pl +103 -0
- data/ext/libsass/src/ast.cpp +621 -495
- data/ext/libsass/src/ast.hpp +801 -367
- data/ext/libsass/src/ast_def_macros.hpp +5 -5
- data/ext/libsass/src/ast_fwd_decl.hpp +312 -14
- data/ext/libsass/src/bind.cpp +54 -51
- data/ext/libsass/src/bind.hpp +3 -7
- data/ext/libsass/src/check_nesting.cpp +117 -120
- data/ext/libsass/src/check_nesting.hpp +38 -34
- data/ext/libsass/src/color_maps.cpp +3 -3
- data/ext/libsass/src/color_maps.hpp +3 -3
- data/ext/libsass/src/context.cpp +33 -34
- data/ext/libsass/src/context.hpp +12 -14
- data/ext/libsass/src/cssize.cpp +200 -228
- data/ext/libsass/src/cssize.hpp +49 -49
- data/ext/libsass/src/debugger.hpp +260 -241
- data/ext/libsass/src/emitter.cpp +6 -6
- data/ext/libsass/src/emitter.hpp +7 -7
- data/ext/libsass/src/environment.cpp +2 -2
- data/ext/libsass/src/environment.hpp +0 -2
- data/ext/libsass/src/error_handling.cpp +5 -5
- data/ext/libsass/src/error_handling.hpp +12 -12
- data/ext/libsass/src/eval.cpp +412 -401
- data/ext/libsass/src/eval.hpp +61 -62
- data/ext/libsass/src/expand.cpp +223 -204
- data/ext/libsass/src/expand.hpp +42 -42
- data/ext/libsass/src/extend.cpp +198 -201
- data/ext/libsass/src/extend.hpp +12 -14
- data/ext/libsass/src/file.hpp +4 -5
- data/ext/libsass/src/functions.cpp +413 -418
- data/ext/libsass/src/functions.hpp +7 -10
- data/ext/libsass/src/inspect.cpp +115 -109
- data/ext/libsass/src/inspect.hpp +69 -69
- data/ext/libsass/src/listize.cpp +31 -33
- data/ext/libsass/src/listize.hpp +8 -10
- data/ext/libsass/src/memory/SharedPtr.cpp +116 -0
- data/ext/libsass/src/memory/SharedPtr.hpp +202 -0
- data/ext/libsass/src/node.cpp +45 -43
- data/ext/libsass/src/node.hpp +15 -15
- data/ext/libsass/src/operation.hpp +136 -136
- data/ext/libsass/src/output.cpp +48 -49
- data/ext/libsass/src/output.hpp +14 -14
- data/ext/libsass/src/parser.cpp +530 -554
- data/ext/libsass/src/parser.hpp +91 -96
- data/ext/libsass/src/prelexer.cpp +13 -10
- data/ext/libsass/src/remove_placeholders.cpp +25 -21
- data/ext/libsass/src/remove_placeholders.hpp +7 -7
- data/ext/libsass/src/sass2scss.cpp +2 -1
- data/ext/libsass/src/sass_context.cpp +125 -107
- data/ext/libsass/src/sass_context.hpp +1 -1
- data/ext/libsass/src/sass_util.hpp +5 -5
- data/ext/libsass/src/sass_values.cpp +27 -27
- data/ext/libsass/src/source_map.cpp +2 -2
- data/ext/libsass/src/source_map.hpp +2 -2
- data/ext/libsass/src/subset_map.cpp +57 -0
- data/ext/libsass/src/subset_map.hpp +8 -76
- data/ext/libsass/src/to_c.cpp +13 -13
- data/ext/libsass/src/to_c.hpp +14 -14
- data/ext/libsass/src/to_value.cpp +20 -20
- data/ext/libsass/src/to_value.hpp +20 -21
- data/ext/libsass/src/util.cpp +55 -88
- data/ext/libsass/src/util.hpp +9 -13
- data/ext/libsass/src/values.cpp +27 -26
- data/ext/libsass/src/values.hpp +2 -2
- data/ext/libsass/test/test_subset_map.cpp +69 -69
- data/ext/libsass/win/libsass.targets +3 -2
- data/ext/libsass/win/libsass.vcxproj.filters +9 -6
- data/lib/sassc/version.rb +1 -1
- data/sassc.gemspec +0 -1
- data/test/native_test.rb +1 -1
- metadata +7 -5
- data/ext/libsass/src/ast_factory.hpp +0 -92
- data/ext/libsass/src/memory_manager.cpp +0 -77
- data/ext/libsass/src/memory_manager.hpp +0 -48
@@ -4,23 +4,20 @@
|
|
4
4
|
#include "listize.hpp"
|
5
5
|
#include "position.hpp"
|
6
6
|
#include "environment.hpp"
|
7
|
+
#include "ast_fwd_decl.hpp"
|
7
8
|
#include "sass/functions.h"
|
8
9
|
|
9
|
-
#define BUILT_IN(name)
|
10
|
-
name(Env& env, Env& d_env, Context& ctx, Signature sig, ParserState pstate, Backtrace* backtrace, std::vector<
|
10
|
+
#define BUILT_IN(name) Expression_Ptr \
|
11
|
+
name(Env& env, Env& d_env, Context& ctx, Signature sig, ParserState pstate, Backtrace* backtrace, std::vector<Selector_List_Obj> selector_stack)
|
11
12
|
|
12
13
|
namespace Sass {
|
13
|
-
class Context;
|
14
14
|
struct Backtrace;
|
15
|
-
|
16
|
-
class Expression;
|
17
|
-
class Definition;
|
18
|
-
typedef Environment<AST_Node*> Env;
|
15
|
+
typedef Environment<AST_Node_Obj> Env;
|
19
16
|
typedef const char* Signature;
|
20
|
-
typedef
|
17
|
+
typedef Expression_Ptr (*Native_Function)(Env&, Env&, Context&, Signature, ParserState, Backtrace*, std::vector<Selector_List_Obj>);
|
21
18
|
|
22
|
-
|
23
|
-
|
19
|
+
Definition_Ptr make_native_function(Signature, Native_Function, Context& ctx);
|
20
|
+
Definition_Ptr make_c_function(Sass_Function_Entry c_func, Context& ctx);
|
24
21
|
|
25
22
|
std::string function_name(Signature);
|
26
23
|
|
data/ext/libsass/src/inspect.cpp
CHANGED
@@ -21,7 +21,7 @@ namespace Sass {
|
|
21
21
|
Inspect::~Inspect() { }
|
22
22
|
|
23
23
|
// statements
|
24
|
-
void Inspect::operator()(
|
24
|
+
void Inspect::operator()(Block_Ptr block)
|
25
25
|
{
|
26
26
|
if (!block->is_root()) {
|
27
27
|
add_open_mapping(block);
|
@@ -39,19 +39,23 @@ namespace Sass {
|
|
39
39
|
|
40
40
|
}
|
41
41
|
|
42
|
-
void Inspect::operator()(
|
42
|
+
void Inspect::operator()(Ruleset_Ptr ruleset)
|
43
43
|
{
|
44
|
-
ruleset->selector()
|
45
|
-
|
44
|
+
if (ruleset->selector()) {
|
45
|
+
ruleset->selector()->perform(this);
|
46
|
+
}
|
47
|
+
if (ruleset->block()) {
|
48
|
+
ruleset->block()->perform(this);
|
49
|
+
}
|
46
50
|
}
|
47
51
|
|
48
|
-
void Inspect::operator()(
|
52
|
+
void Inspect::operator()(Keyframe_Rule_Ptr rule)
|
49
53
|
{
|
50
|
-
if (rule->
|
54
|
+
if (rule->name()) rule->name()->perform(this);
|
51
55
|
if (rule->block()) rule->block()->perform(this);
|
52
56
|
}
|
53
57
|
|
54
|
-
void Inspect::operator()(
|
58
|
+
void Inspect::operator()(Bubble_Ptr bubble)
|
55
59
|
{
|
56
60
|
append_indentation();
|
57
61
|
append_token("::BUBBLE", bubble);
|
@@ -60,7 +64,7 @@ namespace Sass {
|
|
60
64
|
append_scope_closer();
|
61
65
|
}
|
62
66
|
|
63
|
-
void Inspect::operator()(
|
67
|
+
void Inspect::operator()(Media_Block_Ptr media_block)
|
64
68
|
{
|
65
69
|
append_indentation();
|
66
70
|
append_token("@media", media_block);
|
@@ -71,7 +75,7 @@ namespace Sass {
|
|
71
75
|
media_block->block()->perform(this);
|
72
76
|
}
|
73
77
|
|
74
|
-
void Inspect::operator()(
|
78
|
+
void Inspect::operator()(Supports_Block_Ptr feature_block)
|
75
79
|
{
|
76
80
|
append_indentation();
|
77
81
|
append_token("@supports", feature_block);
|
@@ -80,7 +84,7 @@ namespace Sass {
|
|
80
84
|
feature_block->block()->perform(this);
|
81
85
|
}
|
82
86
|
|
83
|
-
void Inspect::operator()(
|
87
|
+
void Inspect::operator()(At_Root_Block_Ptr at_root_block)
|
84
88
|
{
|
85
89
|
append_indentation();
|
86
90
|
append_token("@at-root ", at_root_block);
|
@@ -89,7 +93,7 @@ namespace Sass {
|
|
89
93
|
at_root_block->block()->perform(this);
|
90
94
|
}
|
91
95
|
|
92
|
-
void Inspect::operator()(
|
96
|
+
void Inspect::operator()(Directive_Ptr at_rule)
|
93
97
|
{
|
94
98
|
append_indentation();
|
95
99
|
append_token(at_rule->keyword(), at_rule);
|
@@ -112,7 +116,7 @@ namespace Sass {
|
|
112
116
|
}
|
113
117
|
}
|
114
118
|
|
115
|
-
void Inspect::operator()(
|
119
|
+
void Inspect::operator()(Declaration_Ptr dec)
|
116
120
|
{
|
117
121
|
if (dec->value()->concrete_type() == Expression::NULL_VAL) return;
|
118
122
|
bool was_decl = in_declaration;
|
@@ -120,13 +124,14 @@ namespace Sass {
|
|
120
124
|
if (output_style() == NESTED)
|
121
125
|
indentation += dec->tabs();
|
122
126
|
append_indentation();
|
123
|
-
dec->property()
|
127
|
+
if (dec->property())
|
128
|
+
dec->property()->perform(this);
|
124
129
|
append_colon_separator();
|
125
130
|
|
126
131
|
if (dec->value()->concrete_type() == Expression::SELECTOR) {
|
127
|
-
|
128
|
-
|
129
|
-
|
132
|
+
Listize listize;
|
133
|
+
Expression_Obj ls = dec->value()->perform(&listize);
|
134
|
+
ls->perform(this);
|
130
135
|
} else {
|
131
136
|
dec->value()->perform(this);
|
132
137
|
}
|
@@ -141,7 +146,7 @@ namespace Sass {
|
|
141
146
|
in_declaration = was_decl;
|
142
147
|
}
|
143
148
|
|
144
|
-
void Inspect::operator()(
|
149
|
+
void Inspect::operator()(Assignment_Ptr assn)
|
145
150
|
{
|
146
151
|
append_token(assn->variable(), assn);
|
147
152
|
append_colon_separator();
|
@@ -153,7 +158,7 @@ namespace Sass {
|
|
153
158
|
append_delimiter();
|
154
159
|
}
|
155
160
|
|
156
|
-
void Inspect::operator()(
|
161
|
+
void Inspect::operator()(Import_Ptr import)
|
157
162
|
{
|
158
163
|
if (!import->urls().empty()) {
|
159
164
|
append_token("@import", import);
|
@@ -161,9 +166,9 @@ namespace Sass {
|
|
161
166
|
|
162
167
|
import->urls().front()->perform(this);
|
163
168
|
if (import->urls().size() == 1) {
|
164
|
-
if (import->
|
169
|
+
if (&import->import_queries()) {
|
165
170
|
append_mandatory_space();
|
166
|
-
import->
|
171
|
+
import->import_queries()->perform(this);
|
167
172
|
}
|
168
173
|
}
|
169
174
|
append_delimiter();
|
@@ -174,9 +179,9 @@ namespace Sass {
|
|
174
179
|
|
175
180
|
import->urls()[i]->perform(this);
|
176
181
|
if (import->urls().size() - 1 == i) {
|
177
|
-
if (import->
|
182
|
+
if (&import->import_queries()) {
|
178
183
|
append_mandatory_space();
|
179
|
-
import->
|
184
|
+
import->import_queries()->perform(this);
|
180
185
|
}
|
181
186
|
}
|
182
187
|
append_delimiter();
|
@@ -184,7 +189,7 @@ namespace Sass {
|
|
184
189
|
}
|
185
190
|
}
|
186
191
|
|
187
|
-
void Inspect::operator()(
|
192
|
+
void Inspect::operator()(Import_Stub_Ptr import)
|
188
193
|
{
|
189
194
|
append_indentation();
|
190
195
|
append_token("@import", import);
|
@@ -193,7 +198,7 @@ namespace Sass {
|
|
193
198
|
append_delimiter();
|
194
199
|
}
|
195
200
|
|
196
|
-
void Inspect::operator()(
|
201
|
+
void Inspect::operator()(Warning_Ptr warning)
|
197
202
|
{
|
198
203
|
append_indentation();
|
199
204
|
append_token("@warn", warning);
|
@@ -202,7 +207,7 @@ namespace Sass {
|
|
202
207
|
append_delimiter();
|
203
208
|
}
|
204
209
|
|
205
|
-
void Inspect::operator()(
|
210
|
+
void Inspect::operator()(Error_Ptr error)
|
206
211
|
{
|
207
212
|
append_indentation();
|
208
213
|
append_token("@error", error);
|
@@ -211,7 +216,7 @@ namespace Sass {
|
|
211
216
|
append_delimiter();
|
212
217
|
}
|
213
218
|
|
214
|
-
void Inspect::operator()(
|
219
|
+
void Inspect::operator()(Debug_Ptr debug)
|
215
220
|
{
|
216
221
|
append_indentation();
|
217
222
|
append_token("@debug", debug);
|
@@ -220,14 +225,14 @@ namespace Sass {
|
|
220
225
|
append_delimiter();
|
221
226
|
}
|
222
227
|
|
223
|
-
void Inspect::operator()(
|
228
|
+
void Inspect::operator()(Comment_Ptr comment)
|
224
229
|
{
|
225
230
|
in_comment = true;
|
226
231
|
comment->text()->perform(this);
|
227
232
|
in_comment = false;
|
228
233
|
}
|
229
234
|
|
230
|
-
void Inspect::operator()(
|
235
|
+
void Inspect::operator()(If_Ptr cond)
|
231
236
|
{
|
232
237
|
append_indentation();
|
233
238
|
append_token("@if", cond);
|
@@ -242,7 +247,7 @@ namespace Sass {
|
|
242
247
|
}
|
243
248
|
}
|
244
249
|
|
245
|
-
void Inspect::operator()(
|
250
|
+
void Inspect::operator()(For_Ptr loop)
|
246
251
|
{
|
247
252
|
append_indentation();
|
248
253
|
append_token("@for", loop);
|
@@ -255,7 +260,7 @@ namespace Sass {
|
|
255
260
|
loop->block()->perform(this);
|
256
261
|
}
|
257
262
|
|
258
|
-
void Inspect::operator()(
|
263
|
+
void Inspect::operator()(Each_Ptr loop)
|
259
264
|
{
|
260
265
|
append_indentation();
|
261
266
|
append_token("@each", loop);
|
@@ -270,7 +275,7 @@ namespace Sass {
|
|
270
275
|
loop->block()->perform(this);
|
271
276
|
}
|
272
277
|
|
273
|
-
void Inspect::operator()(
|
278
|
+
void Inspect::operator()(While_Ptr loop)
|
274
279
|
{
|
275
280
|
append_indentation();
|
276
281
|
append_token("@while", loop);
|
@@ -279,7 +284,7 @@ namespace Sass {
|
|
279
284
|
loop->block()->perform(this);
|
280
285
|
}
|
281
286
|
|
282
|
-
void Inspect::operator()(
|
287
|
+
void Inspect::operator()(Return_Ptr ret)
|
283
288
|
{
|
284
289
|
append_indentation();
|
285
290
|
append_token("@return", ret);
|
@@ -288,7 +293,7 @@ namespace Sass {
|
|
288
293
|
append_delimiter();
|
289
294
|
}
|
290
295
|
|
291
|
-
void Inspect::operator()(
|
296
|
+
void Inspect::operator()(Extension_Ptr extend)
|
292
297
|
{
|
293
298
|
append_indentation();
|
294
299
|
append_token("@extend", extend);
|
@@ -297,7 +302,7 @@ namespace Sass {
|
|
297
302
|
append_delimiter();
|
298
303
|
}
|
299
304
|
|
300
|
-
void Inspect::operator()(
|
305
|
+
void Inspect::operator()(Definition_Ptr def)
|
301
306
|
{
|
302
307
|
append_indentation();
|
303
308
|
if (def->type() == Definition::MIXIN) {
|
@@ -312,7 +317,7 @@ namespace Sass {
|
|
312
317
|
def->block()->perform(this);
|
313
318
|
}
|
314
319
|
|
315
|
-
void Inspect::operator()(
|
320
|
+
void Inspect::operator()(Mixin_Call_Ptr call)
|
316
321
|
{
|
317
322
|
append_indentation();
|
318
323
|
append_token("@include", call);
|
@@ -328,14 +333,14 @@ namespace Sass {
|
|
328
333
|
if (!call->block()) append_delimiter();
|
329
334
|
}
|
330
335
|
|
331
|
-
void Inspect::operator()(
|
336
|
+
void Inspect::operator()(Content_Ptr content)
|
332
337
|
{
|
333
338
|
append_indentation();
|
334
339
|
append_token("@content", content);
|
335
340
|
append_delimiter();
|
336
341
|
}
|
337
342
|
|
338
|
-
void Inspect::operator()(
|
343
|
+
void Inspect::operator()(Map_Ptr map)
|
339
344
|
{
|
340
345
|
if (output_style() == TO_SASS && map->empty()) {
|
341
346
|
append_string("()");
|
@@ -355,7 +360,7 @@ namespace Sass {
|
|
355
360
|
append_string(")");
|
356
361
|
}
|
357
362
|
|
358
|
-
void Inspect::operator()(
|
363
|
+
void Inspect::operator()(List_Ptr list)
|
359
364
|
{
|
360
365
|
if (output_style() == TO_SASS && list->empty()) {
|
361
366
|
append_string("()");
|
@@ -373,9 +378,8 @@ namespace Sass {
|
|
373
378
|
if (output_style() == TO_SASS &&
|
374
379
|
list->length() == 1 &&
|
375
380
|
!list->from_selector() &&
|
376
|
-
!
|
377
|
-
!
|
378
|
-
!dynamic_cast<CommaSequence_Selector*>((*list)[0])) {
|
381
|
+
!SASS_MEMORY_CAST(List, list->at(0)) &&
|
382
|
+
!SASS_MEMORY_CAST(Selector_List, list->at(0))) {
|
379
383
|
append_string("(");
|
380
384
|
}
|
381
385
|
else if (!in_declaration && (list->separator() == SASS_HASH ||
|
@@ -391,11 +395,11 @@ namespace Sass {
|
|
391
395
|
for (size_t i = 0, L = list->size(); i < L; ++i) {
|
392
396
|
if (list->separator() == SASS_HASH)
|
393
397
|
{ sep[0] = i % 2 ? ':' : ','; }
|
394
|
-
|
398
|
+
Expression_Obj list_item = list->at(i);
|
395
399
|
if (output_style() != TO_SASS) {
|
396
400
|
if (list_item->is_invisible()) {
|
397
401
|
// this fixes an issue with "" in a list
|
398
|
-
if (!
|
402
|
+
if (!SASS_MEMORY_CAST(String_Constant, list_item)) {
|
399
403
|
continue;
|
400
404
|
}
|
401
405
|
}
|
@@ -415,9 +419,8 @@ namespace Sass {
|
|
415
419
|
if (output_style() == TO_SASS &&
|
416
420
|
list->length() == 1 &&
|
417
421
|
!list->from_selector() &&
|
418
|
-
!
|
419
|
-
!
|
420
|
-
!dynamic_cast<CommaSequence_Selector*>((*list)[0])) {
|
422
|
+
!SASS_MEMORY_CAST(List, list->at(0)) &&
|
423
|
+
!SASS_MEMORY_CAST(Selector_List, list->at(0))) {
|
421
424
|
append_string(",)");
|
422
425
|
}
|
423
426
|
else if (!in_declaration && (list->separator() == SASS_HASH ||
|
@@ -429,7 +432,7 @@ namespace Sass {
|
|
429
432
|
|
430
433
|
}
|
431
434
|
|
432
|
-
void Inspect::operator()(
|
435
|
+
void Inspect::operator()(Binary_Expression_Ptr expr)
|
433
436
|
{
|
434
437
|
expr->left()->perform(this);
|
435
438
|
if ( in_media_block ||
|
@@ -466,36 +469,36 @@ namespace Sass {
|
|
466
469
|
expr->right()->perform(this);
|
467
470
|
}
|
468
471
|
|
469
|
-
void Inspect::operator()(
|
472
|
+
void Inspect::operator()(Unary_Expression_Ptr expr)
|
470
473
|
{
|
471
474
|
if (expr->type() == Unary_Expression::PLUS) append_string("+");
|
472
475
|
else append_string("-");
|
473
476
|
expr->operand()->perform(this);
|
474
477
|
}
|
475
478
|
|
476
|
-
void Inspect::operator()(
|
479
|
+
void Inspect::operator()(Function_Call_Ptr call)
|
477
480
|
{
|
478
481
|
append_token(call->name(), call);
|
479
482
|
call->arguments()->perform(this);
|
480
483
|
}
|
481
484
|
|
482
|
-
void Inspect::operator()(
|
485
|
+
void Inspect::operator()(Function_Call_Schema_Ptr call)
|
483
486
|
{
|
484
487
|
call->name()->perform(this);
|
485
488
|
call->arguments()->perform(this);
|
486
489
|
}
|
487
490
|
|
488
|
-
void Inspect::operator()(
|
491
|
+
void Inspect::operator()(Variable_Ptr var)
|
489
492
|
{
|
490
493
|
append_token(var->name(), var);
|
491
494
|
}
|
492
495
|
|
493
|
-
void Inspect::operator()(
|
496
|
+
void Inspect::operator()(Textual_Ptr txt)
|
494
497
|
{
|
495
498
|
append_token(txt->value(), txt);
|
496
499
|
}
|
497
500
|
|
498
|
-
void Inspect::operator()(
|
501
|
+
void Inspect::operator()(Number_Ptr n)
|
499
502
|
{
|
500
503
|
|
501
504
|
std::string res;
|
@@ -588,7 +591,7 @@ namespace Sass {
|
|
588
591
|
else return c;
|
589
592
|
}
|
590
593
|
|
591
|
-
void Inspect::operator()(
|
594
|
+
void Inspect::operator()(Color_Ptr c)
|
592
595
|
{
|
593
596
|
// output the final token
|
594
597
|
std::stringstream ss;
|
@@ -607,7 +610,7 @@ namespace Sass {
|
|
607
610
|
|
608
611
|
// get color from given name (if one was given at all)
|
609
612
|
if (name != "" && name_to_color(name)) {
|
610
|
-
|
613
|
+
Color_Ptr_Const n = name_to_color(name);
|
611
614
|
r = Sass::round(cap_channel<0xff>(n->r()), opt.precision);
|
612
615
|
g = Sass::round(cap_channel<0xff>(n->g()), opt.precision);
|
613
616
|
b = Sass::round(cap_channel<0xff>(n->b()), opt.precision);
|
@@ -674,13 +677,13 @@ namespace Sass {
|
|
674
677
|
|
675
678
|
}
|
676
679
|
|
677
|
-
void Inspect::operator()(
|
680
|
+
void Inspect::operator()(Boolean_Ptr b)
|
678
681
|
{
|
679
682
|
// output the final token
|
680
683
|
append_token(b->value() ? "true" : "false", b);
|
681
684
|
}
|
682
685
|
|
683
|
-
void Inspect::operator()(
|
686
|
+
void Inspect::operator()(String_Schema_Ptr ss)
|
684
687
|
{
|
685
688
|
// Evaluation should turn these into String_Constants,
|
686
689
|
// so this method is only for inspection purposes.
|
@@ -691,12 +694,12 @@ namespace Sass {
|
|
691
694
|
}
|
692
695
|
}
|
693
696
|
|
694
|
-
void Inspect::operator()(
|
697
|
+
void Inspect::operator()(String_Constant_Ptr s)
|
695
698
|
{
|
696
699
|
append_token(s->value(), s);
|
697
700
|
}
|
698
701
|
|
699
|
-
void Inspect::operator()(
|
702
|
+
void Inspect::operator()(String_Quoted_Ptr s)
|
700
703
|
{
|
701
704
|
if (const char q = s->quote_mark()) {
|
702
705
|
append_token(quote(s->value(), q), s);
|
@@ -705,17 +708,17 @@ namespace Sass {
|
|
705
708
|
}
|
706
709
|
}
|
707
710
|
|
708
|
-
void Inspect::operator()(
|
711
|
+
void Inspect::operator()(Custom_Error_Ptr e)
|
709
712
|
{
|
710
713
|
append_token(e->message(), e);
|
711
714
|
}
|
712
715
|
|
713
|
-
void Inspect::operator()(
|
716
|
+
void Inspect::operator()(Custom_Warning_Ptr w)
|
714
717
|
{
|
715
718
|
append_token(w->message(), w);
|
716
719
|
}
|
717
720
|
|
718
|
-
void Inspect::operator()(
|
721
|
+
void Inspect::operator()(Supports_Operator_Ptr so)
|
719
722
|
{
|
720
723
|
|
721
724
|
if (so->needs_parens(so->left())) append_string("(");
|
@@ -737,16 +740,16 @@ namespace Sass {
|
|
737
740
|
if (so->needs_parens(so->right())) append_string(")");
|
738
741
|
}
|
739
742
|
|
740
|
-
void Inspect::operator()(
|
743
|
+
void Inspect::operator()(Supports_Negation_Ptr sn)
|
741
744
|
{
|
742
745
|
append_token("not", sn);
|
743
746
|
append_mandatory_space();
|
744
|
-
if (sn->needs_parens(sn->condition())) append_string("(");
|
747
|
+
if (sn->needs_parens(&sn->condition())) append_string("(");
|
745
748
|
sn->condition()->perform(this);
|
746
|
-
if (sn->needs_parens(sn->condition())) append_string(")");
|
749
|
+
if (sn->needs_parens(&sn->condition())) append_string(")");
|
747
750
|
}
|
748
751
|
|
749
|
-
void Inspect::operator()(
|
752
|
+
void Inspect::operator()(Supports_Declaration_Ptr sd)
|
750
753
|
{
|
751
754
|
append_string("(");
|
752
755
|
sd->feature()->perform(this);
|
@@ -755,15 +758,15 @@ namespace Sass {
|
|
755
758
|
append_string(")");
|
756
759
|
}
|
757
760
|
|
758
|
-
void Inspect::operator()(
|
761
|
+
void Inspect::operator()(Supports_Interpolation_Ptr sd)
|
759
762
|
{
|
760
763
|
sd->value()->perform(this);
|
761
764
|
}
|
762
765
|
|
763
|
-
void Inspect::operator()(
|
766
|
+
void Inspect::operator()(Media_Query_Ptr mq)
|
764
767
|
{
|
765
768
|
size_t i = 0;
|
766
|
-
if (mq->media_type()) {
|
769
|
+
if (&mq->media_type()) {
|
767
770
|
if (mq->is_negated()) append_string("not ");
|
768
771
|
else if (mq->is_restricted()) append_string("only ");
|
769
772
|
mq->media_type()->perform(this);
|
@@ -777,7 +780,7 @@ namespace Sass {
|
|
777
780
|
}
|
778
781
|
}
|
779
782
|
|
780
|
-
void Inspect::operator()(
|
783
|
+
void Inspect::operator()(Media_Query_Expression_Ptr mqe)
|
781
784
|
{
|
782
785
|
if (mqe->is_interpolated()) {
|
783
786
|
mqe->feature()->perform(this);
|
@@ -793,7 +796,7 @@ namespace Sass {
|
|
793
796
|
}
|
794
797
|
}
|
795
798
|
|
796
|
-
void Inspect::operator()(
|
799
|
+
void Inspect::operator()(At_Root_Query_Ptr ae)
|
797
800
|
{
|
798
801
|
append_string("(");
|
799
802
|
ae->feature()->perform(this);
|
@@ -804,14 +807,14 @@ namespace Sass {
|
|
804
807
|
append_string(")");
|
805
808
|
}
|
806
809
|
|
807
|
-
void Inspect::operator()(
|
810
|
+
void Inspect::operator()(Null_Ptr n)
|
808
811
|
{
|
809
812
|
// output the final token
|
810
813
|
append_token("null", n);
|
811
814
|
}
|
812
815
|
|
813
816
|
// parameters and arguments
|
814
|
-
void Inspect::operator()(
|
817
|
+
void Inspect::operator()(Parameter_Ptr p)
|
815
818
|
{
|
816
819
|
append_token(p->name(), p);
|
817
820
|
if (p->default_value()) {
|
@@ -823,7 +826,7 @@ namespace Sass {
|
|
823
826
|
}
|
824
827
|
}
|
825
828
|
|
826
|
-
void Inspect::operator()(
|
829
|
+
void Inspect::operator()(Parameters_Ptr p)
|
827
830
|
{
|
828
831
|
append_string("(");
|
829
832
|
if (!p->empty()) {
|
@@ -836,26 +839,29 @@ namespace Sass {
|
|
836
839
|
append_string(")");
|
837
840
|
}
|
838
841
|
|
839
|
-
void Inspect::operator()(
|
842
|
+
void Inspect::operator()(Argument_Ptr a)
|
840
843
|
{
|
841
844
|
if (!a->name().empty()) {
|
842
845
|
append_token(a->name(), a);
|
843
846
|
append_colon_separator();
|
844
847
|
}
|
848
|
+
if (!a->value()) return;
|
845
849
|
// Special case: argument nulls can be ignored
|
846
850
|
if (a->value()->concrete_type() == Expression::NULL_VAL) {
|
847
851
|
return;
|
848
852
|
}
|
849
853
|
if (a->value()->concrete_type() == Expression::STRING) {
|
850
|
-
|
851
|
-
s->perform(this);
|
852
|
-
} else
|
854
|
+
String_Constant_Ptr s = SASS_MEMORY_CAST(String_Constant, a->value());
|
855
|
+
if (s) s->perform(this);
|
856
|
+
} else {
|
857
|
+
a->value()->perform(this);
|
858
|
+
}
|
853
859
|
if (a->is_rest_argument()) {
|
854
860
|
append_string("...");
|
855
861
|
}
|
856
862
|
}
|
857
863
|
|
858
|
-
void Inspect::operator()(
|
864
|
+
void Inspect::operator()(Arguments_Ptr a)
|
859
865
|
{
|
860
866
|
append_string("(");
|
861
867
|
if (!a->empty()) {
|
@@ -869,17 +875,17 @@ namespace Sass {
|
|
869
875
|
append_string(")");
|
870
876
|
}
|
871
877
|
|
872
|
-
void Inspect::operator()(
|
878
|
+
void Inspect::operator()(Selector_Schema_Ptr s)
|
873
879
|
{
|
874
880
|
s->contents()->perform(this);
|
875
881
|
}
|
876
882
|
|
877
|
-
void Inspect::operator()(
|
883
|
+
void Inspect::operator()(Parent_Selector_Ptr p)
|
878
884
|
{
|
879
885
|
if (p->is_real_parent_ref()) append_string("&");
|
880
886
|
}
|
881
887
|
|
882
|
-
void Inspect::operator()(
|
888
|
+
void Inspect::operator()(Placeholder_Selector_Ptr s)
|
883
889
|
{
|
884
890
|
append_token(s->name(), s);
|
885
891
|
if (s->has_line_break()) append_optional_linefeed();
|
@@ -887,33 +893,33 @@ namespace Sass {
|
|
887
893
|
|
888
894
|
}
|
889
895
|
|
890
|
-
void Inspect::operator()(
|
896
|
+
void Inspect::operator()(Element_Selector_Ptr s)
|
891
897
|
{
|
892
898
|
append_token(s->ns_name(), s);
|
893
899
|
}
|
894
900
|
|
895
|
-
void Inspect::operator()(
|
901
|
+
void Inspect::operator()(Class_Selector_Ptr s)
|
896
902
|
{
|
897
903
|
append_token(s->ns_name(), s);
|
898
904
|
if (s->has_line_break()) append_optional_linefeed();
|
899
905
|
if (s->has_line_break()) append_indentation();
|
900
906
|
}
|
901
907
|
|
902
|
-
void Inspect::operator()(
|
908
|
+
void Inspect::operator()(Id_Selector_Ptr s)
|
903
909
|
{
|
904
910
|
append_token(s->ns_name(), s);
|
905
911
|
if (s->has_line_break()) append_optional_linefeed();
|
906
912
|
if (s->has_line_break()) append_indentation();
|
907
913
|
}
|
908
914
|
|
909
|
-
void Inspect::operator()(
|
915
|
+
void Inspect::operator()(Attribute_Selector_Ptr s)
|
910
916
|
{
|
911
917
|
append_string("[");
|
912
918
|
add_open_mapping(s);
|
913
919
|
append_token(s->ns_name(), s);
|
914
920
|
if (!s->matcher().empty()) {
|
915
921
|
append_string(s->matcher());
|
916
|
-
if (s->value()) {
|
922
|
+
if (&s->value() && *s->value()) {
|
917
923
|
s->value()->perform(this);
|
918
924
|
}
|
919
925
|
}
|
@@ -921,7 +927,7 @@ namespace Sass {
|
|
921
927
|
append_string("]");
|
922
928
|
}
|
923
929
|
|
924
|
-
void Inspect::operator()(
|
930
|
+
void Inspect::operator()(Pseudo_Selector_Ptr s)
|
925
931
|
{
|
926
932
|
append_token(s->ns_name(), s);
|
927
933
|
if (s->expression()) {
|
@@ -931,7 +937,7 @@ namespace Sass {
|
|
931
937
|
}
|
932
938
|
}
|
933
939
|
|
934
|
-
void Inspect::operator()(
|
940
|
+
void Inspect::operator()(Wrapped_Selector_Ptr s)
|
935
941
|
{
|
936
942
|
bool was = in_wrapped;
|
937
943
|
in_wrapped = true;
|
@@ -945,7 +951,7 @@ namespace Sass {
|
|
945
951
|
in_wrapped = was;
|
946
952
|
}
|
947
953
|
|
948
|
-
void Inspect::operator()(
|
954
|
+
void Inspect::operator()(Compound_Selector_Ptr s)
|
949
955
|
{
|
950
956
|
for (size_t i = 0, L = s->length(); i < L; ++i) {
|
951
957
|
(*s)[i]->perform(this);
|
@@ -957,13 +963,13 @@ namespace Sass {
|
|
957
963
|
}
|
958
964
|
}
|
959
965
|
|
960
|
-
void Inspect::operator()(
|
966
|
+
void Inspect::operator()(Complex_Selector_Ptr c)
|
961
967
|
{
|
962
|
-
|
963
|
-
|
964
|
-
|
968
|
+
Compound_Selector_Obj head = c->head();
|
969
|
+
Complex_Selector_Obj tail = c->tail();
|
970
|
+
Complex_Selector::Combinator comb = c->combinator();
|
965
971
|
|
966
|
-
if (comb ==
|
972
|
+
if (comb == Complex_Selector::ANCESTOR_OF && (!head || head->empty())) {
|
967
973
|
if (tail) tail->perform(this);
|
968
974
|
return;
|
969
975
|
}
|
@@ -978,30 +984,30 @@ namespace Sass {
|
|
978
984
|
if (head && head->length() != 0) head->perform(this);
|
979
985
|
bool is_empty = !head || head->length() == 0 || head->is_empty_reference();
|
980
986
|
bool is_tail = head && !head->is_empty_reference() && tail;
|
981
|
-
if (output_style() == COMPRESSED && comb !=
|
987
|
+
if (output_style() == COMPRESSED && comb != Complex_Selector::ANCESTOR_OF) scheduled_space = 0;
|
982
988
|
|
983
989
|
switch (comb) {
|
984
|
-
case
|
990
|
+
case Complex_Selector::ANCESTOR_OF:
|
985
991
|
if (is_tail) append_mandatory_space();
|
986
992
|
break;
|
987
|
-
case
|
993
|
+
case Complex_Selector::PARENT_OF:
|
988
994
|
append_optional_space();
|
989
995
|
append_string(">");
|
990
996
|
append_optional_space();
|
991
997
|
break;
|
992
|
-
case
|
998
|
+
case Complex_Selector::ADJACENT_TO:
|
993
999
|
append_optional_space();
|
994
1000
|
append_string("+");
|
995
1001
|
append_optional_space();
|
996
1002
|
break;
|
997
|
-
case
|
1003
|
+
case Complex_Selector::REFERENCE:
|
998
1004
|
append_mandatory_space();
|
999
1005
|
append_string("/");
|
1000
1006
|
c->reference()->perform(this);
|
1001
1007
|
append_string("/");
|
1002
1008
|
append_mandatory_space();
|
1003
1009
|
break;
|
1004
|
-
case
|
1010
|
+
case Complex_Selector::PRECEDES:
|
1005
1011
|
if (is_empty) append_optional_space();
|
1006
1012
|
else append_mandatory_space();
|
1007
1013
|
append_string("~");
|
@@ -1009,7 +1015,7 @@ namespace Sass {
|
|
1009
1015
|
else append_optional_space();
|
1010
1016
|
break;
|
1011
1017
|
}
|
1012
|
-
if (tail && comb !=
|
1018
|
+
if (tail && comb != Complex_Selector::ANCESTOR_OF) {
|
1013
1019
|
if (c->has_line_break()) append_optional_linefeed();
|
1014
1020
|
}
|
1015
1021
|
if (tail) tail->perform(this);
|
@@ -1020,7 +1026,7 @@ namespace Sass {
|
|
1020
1026
|
}
|
1021
1027
|
}
|
1022
1028
|
|
1023
|
-
void Inspect::operator()(
|
1029
|
+
void Inspect::operator()(Selector_List_Ptr g)
|
1024
1030
|
{
|
1025
1031
|
|
1026
1032
|
if (g->empty()) {
|
@@ -1034,8 +1040,8 @@ namespace Sass {
|
|
1034
1040
|
bool was_comma_array = in_comma_array;
|
1035
1041
|
// probably ruby sass eqivalent of element_needs_parens
|
1036
1042
|
if (output_style() == TO_SASS && g->length() == 1 &&
|
1037
|
-
(!
|
1038
|
-
!
|
1043
|
+
(!SASS_MEMORY_CAST(List, (*g)[0]) &&
|
1044
|
+
!SASS_MEMORY_CAST(Selector_List, (*g)[0]))) {
|
1039
1045
|
append_string("(");
|
1040
1046
|
}
|
1041
1047
|
else if (!in_declaration && in_comma_array) {
|
@@ -1047,7 +1053,7 @@ namespace Sass {
|
|
1047
1053
|
for (size_t i = 0, L = g->length(); i < L; ++i) {
|
1048
1054
|
if (!in_wrapped && i == 0) append_indentation();
|
1049
1055
|
if ((*g)[i] == 0) continue;
|
1050
|
-
schedule_mapping((
|
1056
|
+
schedule_mapping(&g->at(i)->last());
|
1051
1057
|
// add_open_mapping((*g)[i]->last());
|
1052
1058
|
(*g)[i]->perform(this);
|
1053
1059
|
// add_close_mapping((*g)[i]->last());
|
@@ -1060,8 +1066,8 @@ namespace Sass {
|
|
1060
1066
|
in_comma_array = was_comma_array;
|
1061
1067
|
// probably ruby sass eqivalent of element_needs_parens
|
1062
1068
|
if (output_style() == TO_SASS && g->length() == 1 &&
|
1063
|
-
(!
|
1064
|
-
!
|
1069
|
+
(!SASS_MEMORY_CAST(List, (*g)[0]) &&
|
1070
|
+
!SASS_MEMORY_CAST(Selector_List, (*g)[0]))) {
|
1065
1071
|
append_string(",)");
|
1066
1072
|
}
|
1067
1073
|
else if (!in_declaration && in_comma_array) {
|
@@ -1070,7 +1076,7 @@ namespace Sass {
|
|
1070
1076
|
|
1071
1077
|
}
|
1072
1078
|
|
1073
|
-
void Inspect::fallback_impl(
|
1079
|
+
void Inspect::fallback_impl(AST_Node_Ptr n)
|
1074
1080
|
{
|
1075
1081
|
}
|
1076
1082
|
|