sassc 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +5 -0
- data/ext/libsass/VERSION +1 -1
- data/ext/libsass/include/sass/context.h +3 -0
- data/ext/libsass/src/MurmurHash2.hpp +91 -0
- data/ext/libsass/src/ast.cpp +117 -117
- data/ext/libsass/src/ast.hpp +160 -162
- data/ext/libsass/src/ast_def_macros.hpp +10 -10
- data/ext/libsass/src/ast_fwd_decl.cpp +2 -2
- data/ext/libsass/src/ast_fwd_decl.hpp +61 -52
- data/ext/libsass/src/ast_helpers.hpp +5 -5
- data/ext/libsass/src/ast_sel_cmp.cpp +18 -18
- data/ext/libsass/src/ast_sel_super.cpp +52 -52
- data/ext/libsass/src/ast_sel_unify.cpp +16 -16
- data/ext/libsass/src/ast_sel_weave.cpp +62 -62
- data/ext/libsass/src/ast_selectors.cpp +87 -77
- data/ext/libsass/src/ast_selectors.hpp +72 -62
- data/ext/libsass/src/ast_supports.cpp +35 -35
- data/ext/libsass/src/ast_supports.hpp +29 -29
- data/ext/libsass/src/ast_values.cpp +58 -58
- data/ext/libsass/src/ast_values.hpp +75 -75
- 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 +17 -17
- 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/check_nesting.cpp +36 -36
- data/ext/libsass/src/check_nesting.hpp +2 -2
- data/ext/libsass/src/color_maps.cpp +5 -5
- data/ext/libsass/src/color_maps.hpp +1 -1
- data/ext/libsass/src/context.cpp +63 -60
- data/ext/libsass/src/context.hpp +33 -33
- data/ext/libsass/src/cssize.cpp +30 -29
- data/ext/libsass/src/cssize.hpp +13 -13
- data/ext/libsass/src/dart_helpers.hpp +5 -5
- data/ext/libsass/src/debugger.hpp +127 -128
- data/ext/libsass/src/emitter.cpp +12 -12
- data/ext/libsass/src/emitter.hpp +10 -10
- data/ext/libsass/src/environment.cpp +27 -27
- data/ext/libsass/src/environment.hpp +24 -24
- data/ext/libsass/src/error_handling.cpp +42 -42
- data/ext/libsass/src/error_handling.hpp +38 -50
- data/ext/libsass/src/eval.cpp +138 -132
- data/ext/libsass/src/eval.hpp +17 -17
- data/ext/libsass/src/eval_selectors.cpp +3 -3
- data/ext/libsass/src/expand.cpp +70 -64
- data/ext/libsass/src/expand.hpp +12 -12
- data/ext/libsass/src/extender.cpp +55 -53
- data/ext/libsass/src/extender.hpp +14 -14
- data/ext/libsass/src/file.cpp +66 -58
- data/ext/libsass/src/file.hpp +23 -25
- data/ext/libsass/src/fn_colors.cpp +9 -9
- data/ext/libsass/src/fn_lists.cpp +18 -18
- data/ext/libsass/src/fn_maps.cpp +3 -3
- data/ext/libsass/src/fn_miscs.cpp +15 -15
- data/ext/libsass/src/fn_numbers.cpp +7 -7
- data/ext/libsass/src/fn_selectors.cpp +8 -8
- data/ext/libsass/src/fn_strings.cpp +34 -22
- data/ext/libsass/src/fn_utils.cpp +29 -26
- data/ext/libsass/src/fn_utils.hpp +10 -10
- data/ext/libsass/src/inspect.cpp +35 -34
- data/ext/libsass/src/inspect.hpp +21 -21
- data/ext/libsass/src/lexer.cpp +3 -1
- data/ext/libsass/src/listize.cpp +2 -2
- 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} +18 -6
- data/ext/libsass/src/operation.hpp +44 -44
- data/ext/libsass/src/operators.cpp +18 -18
- data/ext/libsass/src/operators.hpp +11 -11
- data/ext/libsass/src/ordered_map.hpp +18 -18
- data/ext/libsass/src/output.cpp +16 -16
- data/ext/libsass/src/output.hpp +5 -5
- data/ext/libsass/src/parser.cpp +327 -345
- data/ext/libsass/src/parser.hpp +77 -87
- data/ext/libsass/src/parser_selectors.cpp +6 -6
- data/ext/libsass/src/permutate.hpp +39 -15
- 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/remove_placeholders.cpp +4 -4
- data/ext/libsass/src/remove_placeholders.hpp +3 -3
- data/ext/libsass/src/sass.cpp +16 -15
- data/ext/libsass/src/sass.hpp +9 -5
- data/ext/libsass/src/sass_context.cpp +52 -34
- data/ext/libsass/src/sass_values.cpp +8 -10
- 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/units.cpp +19 -19
- 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 +38 -38
- data/ext/libsass/src/util.hpp +18 -18
- data/ext/libsass/src/util_string.cpp +13 -13
- data/ext/libsass/src/util_string.hpp +9 -8
- data/ext/libsass/src/values.cpp +12 -12
- data/lib/sassc/native.rb +3 -5
- data/lib/sassc/version.rb +1 -1
- data/test/native_test.rb +4 -4
- metadata +14 -5
- data/lib/sassc/native/lib_c.rb +0 -21
@@ -15,25 +15,25 @@ namespace Sass {
|
|
15
15
|
bool compoundIsSuperselector(
|
16
16
|
const CompoundSelectorObj& compound1,
|
17
17
|
const CompoundSelectorObj& compound2,
|
18
|
-
const
|
18
|
+
const sass::vector<SelectorComponentObj>& parents);
|
19
19
|
|
20
20
|
bool complexIsParentSuperselector(
|
21
|
-
const
|
22
|
-
const
|
21
|
+
const sass::vector<SelectorComponentObj>& complex1,
|
22
|
+
const sass::vector<SelectorComponentObj>& complex2);
|
23
23
|
|
24
|
-
|
25
|
-
const
|
24
|
+
sass::vector<sass::vector<SelectorComponentObj>> weave(
|
25
|
+
const sass::vector<sass::vector<SelectorComponentObj>>& complexes);
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
sass::vector<sass::vector<SelectorComponentObj>> weaveParents(
|
28
|
+
sass::vector<SelectorComponentObj> parents1,
|
29
|
+
sass::vector<SelectorComponentObj> parents2);
|
30
30
|
|
31
|
-
|
32
|
-
const
|
33
|
-
const
|
31
|
+
sass::vector<SimpleSelectorObj> unifyCompound(
|
32
|
+
const sass::vector<SimpleSelectorObj>& compound1,
|
33
|
+
const sass::vector<SimpleSelectorObj>& compound2);
|
34
34
|
|
35
|
-
|
36
|
-
const
|
35
|
+
sass::vector<sass::vector<SelectorComponentObj>> unifyComplex(
|
36
|
+
const sass::vector<sass::vector<SelectorComponentObj>>& complexes);
|
37
37
|
|
38
38
|
/////////////////////////////////////////
|
39
39
|
// Abstract base class for CSS selectors.
|
@@ -42,7 +42,7 @@ namespace Sass {
|
|
42
42
|
protected:
|
43
43
|
mutable size_t hash_;
|
44
44
|
public:
|
45
|
-
Selector(
|
45
|
+
Selector(SourceSpan pstate);
|
46
46
|
virtual ~Selector() = 0;
|
47
47
|
size_t hash() const override = 0;
|
48
48
|
virtual bool has_real_parent_ref() const;
|
@@ -68,7 +68,7 @@ namespace Sass {
|
|
68
68
|
// store computed hash
|
69
69
|
mutable size_t hash_;
|
70
70
|
public:
|
71
|
-
Selector_Schema(
|
71
|
+
Selector_Schema(SourceSpan pstate, String_Obj c);
|
72
72
|
|
73
73
|
bool has_real_parent_ref() const;
|
74
74
|
// selector schema is not yet a final selector, so we do not
|
@@ -93,13 +93,15 @@ namespace Sass {
|
|
93
93
|
PLACEHOLDER_SEL,
|
94
94
|
};
|
95
95
|
public:
|
96
|
-
HASH_CONSTREF(
|
97
|
-
HASH_CONSTREF(
|
96
|
+
HASH_CONSTREF(sass::string, ns)
|
97
|
+
HASH_CONSTREF(sass::string, name)
|
98
98
|
ADD_PROPERTY(Simple_Type, simple_type)
|
99
99
|
HASH_PROPERTY(bool, has_ns)
|
100
100
|
public:
|
101
|
-
SimpleSelector(
|
102
|
-
|
101
|
+
SimpleSelector(SourceSpan pstate, sass::string n = "");
|
102
|
+
// ordering within parent (peudos go last)
|
103
|
+
virtual int getSortOrder() const = 0;
|
104
|
+
virtual sass::string ns_name() const;
|
103
105
|
size_t hash() const override;
|
104
106
|
virtual bool empty() const;
|
105
107
|
// namespace compare functions
|
@@ -117,9 +119,9 @@ namespace Sass {
|
|
117
119
|
virtual CompoundSelector* unifyWith(CompoundSelector*);
|
118
120
|
|
119
121
|
/* helper function for syntax sugar */
|
120
|
-
virtual
|
121
|
-
virtual
|
122
|
-
virtual
|
122
|
+
virtual IDSelector* getIdSelector() { return NULL; }
|
123
|
+
virtual TypeSelector* getTypeSelector() { return NULL; }
|
124
|
+
virtual PseudoSelector* getPseudoSelector() { return NULL; }
|
123
125
|
|
124
126
|
ComplexSelectorObj wrapInComplex();
|
125
127
|
CompoundSelectorObj wrapInCompound();
|
@@ -144,77 +146,82 @@ namespace Sass {
|
|
144
146
|
/////////////////////////////////////////////////////////////////////////
|
145
147
|
// Placeholder selectors (e.g., "%foo") for use in extend-only selectors.
|
146
148
|
/////////////////////////////////////////////////////////////////////////
|
147
|
-
class
|
149
|
+
class PlaceholderSelector final : public SimpleSelector {
|
148
150
|
public:
|
149
|
-
|
151
|
+
PlaceholderSelector(SourceSpan pstate, sass::string n);
|
152
|
+
int getSortOrder() const override final { return 0; }
|
150
153
|
bool isInvisible() const override { return true; }
|
151
154
|
virtual unsigned long specificity() const override;
|
152
155
|
virtual bool has_placeholder() override;
|
153
156
|
bool operator==(const SimpleSelector& rhs) const override;
|
154
|
-
ATTACH_CMP_OPERATIONS(
|
155
|
-
ATTACH_AST_OPERATIONS(
|
157
|
+
ATTACH_CMP_OPERATIONS(PlaceholderSelector)
|
158
|
+
ATTACH_AST_OPERATIONS(PlaceholderSelector)
|
156
159
|
ATTACH_CRTP_PERFORM_METHODS()
|
157
160
|
};
|
158
161
|
|
159
162
|
/////////////////////////////////////////////////////////////////////
|
160
163
|
// Type selectors (and the universal selector) -- e.g., div, span, *.
|
161
164
|
/////////////////////////////////////////////////////////////////////
|
162
|
-
class
|
165
|
+
class TypeSelector final : public SimpleSelector {
|
163
166
|
public:
|
164
|
-
|
167
|
+
TypeSelector(SourceSpan pstate, sass::string n);
|
168
|
+
int getSortOrder() const override final { return 1; }
|
165
169
|
virtual unsigned long specificity() const override;
|
166
170
|
SimpleSelector* unifyWith(const SimpleSelector*);
|
167
171
|
CompoundSelector* unifyWith(CompoundSelector*) override;
|
168
|
-
|
172
|
+
TypeSelector* getTypeSelector() override { return this; }
|
169
173
|
bool operator==(const SimpleSelector& rhs) const final override;
|
170
|
-
ATTACH_CMP_OPERATIONS(
|
171
|
-
ATTACH_AST_OPERATIONS(
|
174
|
+
ATTACH_CMP_OPERATIONS(TypeSelector)
|
175
|
+
ATTACH_AST_OPERATIONS(TypeSelector)
|
172
176
|
ATTACH_CRTP_PERFORM_METHODS()
|
173
177
|
};
|
174
178
|
|
175
179
|
////////////////////////////////////////////////
|
176
180
|
// Class selectors -- i.e., .foo.
|
177
181
|
////////////////////////////////////////////////
|
178
|
-
class
|
182
|
+
class ClassSelector final : public SimpleSelector {
|
179
183
|
public:
|
180
|
-
|
184
|
+
ClassSelector(SourceSpan pstate, sass::string n);
|
185
|
+
int getSortOrder() const override final { return 3; }
|
181
186
|
virtual unsigned long specificity() const override;
|
182
187
|
bool operator==(const SimpleSelector& rhs) const final override;
|
183
|
-
ATTACH_CMP_OPERATIONS(
|
184
|
-
ATTACH_AST_OPERATIONS(
|
188
|
+
ATTACH_CMP_OPERATIONS(ClassSelector)
|
189
|
+
ATTACH_AST_OPERATIONS(ClassSelector)
|
185
190
|
ATTACH_CRTP_PERFORM_METHODS()
|
186
191
|
};
|
187
192
|
|
188
193
|
////////////////////////////////////////////////
|
189
194
|
// ID selectors -- i.e., #foo.
|
190
195
|
////////////////////////////////////////////////
|
191
|
-
class
|
196
|
+
class IDSelector final : public SimpleSelector {
|
192
197
|
public:
|
193
|
-
|
198
|
+
IDSelector(SourceSpan pstate, sass::string n);
|
199
|
+
int getSortOrder() const override final { return 2; }
|
194
200
|
virtual unsigned long specificity() const override;
|
195
201
|
CompoundSelector* unifyWith(CompoundSelector*) override;
|
196
|
-
|
202
|
+
IDSelector* getIdSelector() final override { return this; }
|
197
203
|
bool operator==(const SimpleSelector& rhs) const final override;
|
198
|
-
ATTACH_CMP_OPERATIONS(
|
199
|
-
ATTACH_AST_OPERATIONS(
|
204
|
+
ATTACH_CMP_OPERATIONS(IDSelector)
|
205
|
+
ATTACH_AST_OPERATIONS(IDSelector)
|
200
206
|
ATTACH_CRTP_PERFORM_METHODS()
|
201
207
|
};
|
202
208
|
|
203
209
|
///////////////////////////////////////////////////
|
204
210
|
// Attribute selectors -- e.g., [src*=".jpg"], etc.
|
205
211
|
///////////////////////////////////////////////////
|
206
|
-
class
|
207
|
-
ADD_CONSTREF(
|
212
|
+
class AttributeSelector final : public SimpleSelector {
|
213
|
+
ADD_CONSTREF(sass::string, matcher)
|
208
214
|
// this cannot be changed to obj atm!!!!!!????!!!!!!!
|
209
215
|
ADD_PROPERTY(String_Obj, value) // might be interpolated
|
210
216
|
ADD_PROPERTY(char, modifier);
|
211
217
|
public:
|
212
|
-
|
218
|
+
AttributeSelector(SourceSpan pstate, sass::string n, sass::string m, String_Obj v, char o = 0);
|
219
|
+
int getSortOrder() const override final { return 4; }
|
213
220
|
size_t hash() const override;
|
214
221
|
virtual unsigned long specificity() const override;
|
215
222
|
bool operator==(const SimpleSelector& rhs) const final override;
|
216
|
-
ATTACH_CMP_OPERATIONS(
|
217
|
-
ATTACH_AST_OPERATIONS(
|
223
|
+
ATTACH_CMP_OPERATIONS(AttributeSelector)
|
224
|
+
ATTACH_AST_OPERATIONS(AttributeSelector)
|
218
225
|
ATTACH_CRTP_PERFORM_METHODS()
|
219
226
|
};
|
220
227
|
|
@@ -222,14 +229,15 @@ namespace Sass {
|
|
222
229
|
// Pseudo selectors -- e.g., :first-child, :nth-of-type(...), etc.
|
223
230
|
//////////////////////////////////////////////////////////////////
|
224
231
|
// Pseudo Selector cannot have any namespace?
|
225
|
-
class
|
226
|
-
ADD_PROPERTY(
|
232
|
+
class PseudoSelector final : public SimpleSelector {
|
233
|
+
ADD_PROPERTY(sass::string, normalized)
|
227
234
|
ADD_PROPERTY(String_Obj, argument)
|
228
235
|
ADD_PROPERTY(SelectorListObj, selector)
|
229
236
|
ADD_PROPERTY(bool, isSyntacticClass)
|
230
237
|
ADD_PROPERTY(bool, isClass)
|
231
238
|
public:
|
232
|
-
|
239
|
+
PseudoSelector(SourceSpan pstate, sass::string n, bool element = false);
|
240
|
+
int getSortOrder() const override final { return 5; }
|
233
241
|
virtual bool is_pseudo_element() const override;
|
234
242
|
size_t hash() const override;
|
235
243
|
|
@@ -246,13 +254,13 @@ namespace Sass {
|
|
246
254
|
bool isSyntacticElement() const { return !isSyntacticClass(); }
|
247
255
|
|
248
256
|
virtual unsigned long specificity() const override;
|
249
|
-
|
257
|
+
PseudoSelectorObj withSelector(SelectorListObj selector);
|
250
258
|
|
251
259
|
CompoundSelector* unifyWith(CompoundSelector*) override;
|
252
|
-
|
260
|
+
PseudoSelector* getPseudoSelector() final override { return this; }
|
253
261
|
bool operator==(const SimpleSelector& rhs) const final override;
|
254
|
-
ATTACH_CMP_OPERATIONS(
|
255
|
-
ATTACH_AST_OPERATIONS(
|
262
|
+
ATTACH_CMP_OPERATIONS(PseudoSelector)
|
263
|
+
ATTACH_AST_OPERATIONS(PseudoSelector)
|
256
264
|
void cloneChildren() override;
|
257
265
|
ATTACH_CRTP_PERFORM_METHODS()
|
258
266
|
};
|
@@ -269,7 +277,7 @@ namespace Sass {
|
|
269
277
|
// line break before list separator
|
270
278
|
ADD_PROPERTY(bool, hasPreLineFeed)
|
271
279
|
public:
|
272
|
-
ComplexSelector(
|
280
|
+
ComplexSelector(SourceSpan pstate);
|
273
281
|
|
274
282
|
// Returns true if the first components
|
275
283
|
// is a compound selector and fullfills
|
@@ -310,7 +318,7 @@ namespace Sass {
|
|
310
318
|
// line break after list separator
|
311
319
|
ADD_PROPERTY(bool, hasPostLineBreak)
|
312
320
|
public:
|
313
|
-
SelectorComponent(
|
321
|
+
SelectorComponent(SourceSpan pstate, bool postLineBreak = false);
|
314
322
|
size_t hash() const override = 0;
|
315
323
|
void cloneChildren() override;
|
316
324
|
|
@@ -357,7 +365,7 @@ namespace Sass {
|
|
357
365
|
HASH_CONSTREF(Combinator, combinator)
|
358
366
|
|
359
367
|
public:
|
360
|
-
SelectorCombinator(
|
368
|
+
SelectorCombinator(SourceSpan pstate, Combinator combinator, bool postLineBreak = false);
|
361
369
|
|
362
370
|
bool has_real_parent_ref() const override { return false; }
|
363
371
|
bool has_placeholder() const override { return false; }
|
@@ -407,7 +415,7 @@ namespace Sass {
|
|
407
415
|
ADD_PROPERTY(bool, hasRealParent)
|
408
416
|
ADD_PROPERTY(bool, extended)
|
409
417
|
public:
|
410
|
-
CompoundSelector(
|
418
|
+
CompoundSelector(SourceSpan pstate, bool postLineBreak = false);
|
411
419
|
|
412
420
|
// Returns true if this compound selector
|
413
421
|
// fullfills various criteria.
|
@@ -424,12 +432,12 @@ namespace Sass {
|
|
424
432
|
CompoundSelector* getCompound() final override { return this; }
|
425
433
|
const CompoundSelector* getCompound() const final override { return this; }
|
426
434
|
|
427
|
-
bool isSuperselectorOf(const CompoundSelector* sub,
|
435
|
+
bool isSuperselectorOf(const CompoundSelector* sub, sass::string wrapped = "") const;
|
428
436
|
|
429
437
|
void cloneChildren() override;
|
430
438
|
bool has_real_parent_ref() const override;
|
431
439
|
bool has_placeholder() const override;
|
432
|
-
|
440
|
+
sass::vector<ComplexSelectorObj> resolve_parent_refs(SelectorStack pstack, Backtraces& traces, bool implicit_parent = true);
|
433
441
|
|
434
442
|
virtual bool isCompound() const override { return true; };
|
435
443
|
virtual unsigned long specificity() const override;
|
@@ -445,6 +453,8 @@ namespace Sass {
|
|
445
453
|
bool operator==(const ComplexSelector& rhs) const;
|
446
454
|
bool operator==(const SimpleSelector& rhs) const;
|
447
455
|
|
456
|
+
void sortChildren();
|
457
|
+
|
448
458
|
ATTACH_CMP_OPERATIONS(CompoundSelector)
|
449
459
|
ATTACH_AST_OPERATIONS(CompoundSelector)
|
450
460
|
ATTACH_CRTP_PERFORM_METHODS()
|
@@ -459,8 +469,8 @@ namespace Sass {
|
|
459
469
|
// ToDo: should be at ExtendRule?
|
460
470
|
ADD_PROPERTY(bool, is_optional)
|
461
471
|
public:
|
462
|
-
SelectorList(
|
463
|
-
|
472
|
+
SelectorList(SourceSpan pstate, size_t s = 0);
|
473
|
+
sass::string type() const override { return "list"; }
|
464
474
|
size_t hash() const override;
|
465
475
|
|
466
476
|
SelectorList* unifyWith(SelectorList*);
|
@@ -501,8 +511,8 @@ namespace Sass {
|
|
501
511
|
ADD_PROPERTY(SelectorListObj, selector)
|
502
512
|
ADD_PROPERTY(Selector_Schema_Obj, schema)
|
503
513
|
public:
|
504
|
-
ExtendRule(
|
505
|
-
ExtendRule(
|
514
|
+
ExtendRule(SourceSpan pstate, SelectorListObj s);
|
515
|
+
ExtendRule(SourceSpan pstate, Selector_Schema_Obj s);
|
506
516
|
ATTACH_AST_OPERATIONS(ExtendRule)
|
507
517
|
ATTACH_CRTP_PERFORM_METHODS()
|
508
518
|
};
|
@@ -9,75 +9,75 @@ namespace Sass {
|
|
9
9
|
/////////////////////////////////////////////////////////////////////////
|
10
10
|
/////////////////////////////////////////////////////////////////////////
|
11
11
|
|
12
|
-
|
13
|
-
:
|
12
|
+
SupportsRule::SupportsRule(SourceSpan pstate, SupportsConditionObj condition, Block_Obj block)
|
13
|
+
: ParentStatement(pstate, block), condition_(condition)
|
14
14
|
{ statement_type(SUPPORTS); }
|
15
|
-
|
16
|
-
:
|
15
|
+
SupportsRule::SupportsRule(const SupportsRule* ptr)
|
16
|
+
: ParentStatement(ptr), condition_(ptr->condition_)
|
17
17
|
{ statement_type(SUPPORTS); }
|
18
|
-
bool
|
18
|
+
bool SupportsRule::bubbles() { return true; }
|
19
19
|
|
20
20
|
/////////////////////////////////////////////////////////////////////////
|
21
21
|
/////////////////////////////////////////////////////////////////////////
|
22
22
|
|
23
|
-
|
23
|
+
SupportsCondition::SupportsCondition(SourceSpan pstate)
|
24
24
|
: Expression(pstate)
|
25
25
|
{ }
|
26
26
|
|
27
|
-
|
27
|
+
SupportsCondition::SupportsCondition(const SupportsCondition* ptr)
|
28
28
|
: Expression(ptr)
|
29
29
|
{ }
|
30
30
|
|
31
31
|
/////////////////////////////////////////////////////////////////////////
|
32
32
|
/////////////////////////////////////////////////////////////////////////
|
33
33
|
|
34
|
-
|
35
|
-
:
|
34
|
+
SupportsOperation::SupportsOperation(SourceSpan pstate, SupportsConditionObj l, SupportsConditionObj r, Operand o)
|
35
|
+
: SupportsCondition(pstate), left_(l), right_(r), operand_(o)
|
36
36
|
{ }
|
37
|
-
|
38
|
-
:
|
37
|
+
SupportsOperation::SupportsOperation(const SupportsOperation* ptr)
|
38
|
+
: SupportsCondition(ptr),
|
39
39
|
left_(ptr->left_),
|
40
40
|
right_(ptr->right_),
|
41
41
|
operand_(ptr->operand_)
|
42
42
|
{ }
|
43
43
|
|
44
|
-
bool
|
44
|
+
bool SupportsOperation::needs_parens(SupportsConditionObj cond) const
|
45
45
|
{
|
46
|
-
if (
|
46
|
+
if (SupportsOperationObj op = Cast<SupportsOperation>(cond)) {
|
47
47
|
return op->operand() != operand();
|
48
48
|
}
|
49
|
-
return Cast<
|
49
|
+
return Cast<SupportsNegation>(cond) != NULL;
|
50
50
|
}
|
51
51
|
|
52
52
|
/////////////////////////////////////////////////////////////////////////
|
53
53
|
/////////////////////////////////////////////////////////////////////////
|
54
54
|
|
55
|
-
|
56
|
-
:
|
55
|
+
SupportsNegation::SupportsNegation(SourceSpan pstate, SupportsConditionObj c)
|
56
|
+
: SupportsCondition(pstate), condition_(c)
|
57
57
|
{ }
|
58
|
-
|
59
|
-
:
|
58
|
+
SupportsNegation::SupportsNegation(const SupportsNegation* ptr)
|
59
|
+
: SupportsCondition(ptr), condition_(ptr->condition_)
|
60
60
|
{ }
|
61
61
|
|
62
|
-
bool
|
62
|
+
bool SupportsNegation::needs_parens(SupportsConditionObj cond) const
|
63
63
|
{
|
64
|
-
return Cast<
|
65
|
-
Cast<
|
64
|
+
return Cast<SupportsNegation>(cond) ||
|
65
|
+
Cast<SupportsOperation>(cond);
|
66
66
|
}
|
67
67
|
|
68
68
|
/////////////////////////////////////////////////////////////////////////
|
69
69
|
/////////////////////////////////////////////////////////////////////////
|
70
70
|
|
71
|
-
|
72
|
-
:
|
71
|
+
SupportsDeclaration::SupportsDeclaration(SourceSpan pstate, ExpressionObj f, ExpressionObj v)
|
72
|
+
: SupportsCondition(pstate), feature_(f), value_(v)
|
73
73
|
{ }
|
74
|
-
|
75
|
-
:
|
74
|
+
SupportsDeclaration::SupportsDeclaration(const SupportsDeclaration* ptr)
|
75
|
+
: SupportsCondition(ptr),
|
76
76
|
feature_(ptr->feature_),
|
77
77
|
value_(ptr->value_)
|
78
78
|
{ }
|
79
79
|
|
80
|
-
bool
|
80
|
+
bool SupportsDeclaration::needs_parens(SupportsConditionObj cond) const
|
81
81
|
{
|
82
82
|
return false;
|
83
83
|
}
|
@@ -85,15 +85,15 @@ namespace Sass {
|
|
85
85
|
/////////////////////////////////////////////////////////////////////////
|
86
86
|
/////////////////////////////////////////////////////////////////////////
|
87
87
|
|
88
|
-
Supports_Interpolation::Supports_Interpolation(
|
89
|
-
:
|
88
|
+
Supports_Interpolation::Supports_Interpolation(SourceSpan pstate, ExpressionObj v)
|
89
|
+
: SupportsCondition(pstate), value_(v)
|
90
90
|
{ }
|
91
91
|
Supports_Interpolation::Supports_Interpolation(const Supports_Interpolation* ptr)
|
92
|
-
:
|
92
|
+
: SupportsCondition(ptr),
|
93
93
|
value_(ptr->value_)
|
94
94
|
{ }
|
95
95
|
|
96
|
-
bool Supports_Interpolation::needs_parens(
|
96
|
+
bool Supports_Interpolation::needs_parens(SupportsConditionObj cond) const
|
97
97
|
{
|
98
98
|
return false;
|
99
99
|
}
|
@@ -101,11 +101,11 @@ namespace Sass {
|
|
101
101
|
/////////////////////////////////////////////////////////////////////////
|
102
102
|
/////////////////////////////////////////////////////////////////////////
|
103
103
|
|
104
|
-
IMPLEMENT_AST_OPERATORS(
|
105
|
-
IMPLEMENT_AST_OPERATORS(
|
106
|
-
IMPLEMENT_AST_OPERATORS(
|
107
|
-
IMPLEMENT_AST_OPERATORS(
|
108
|
-
IMPLEMENT_AST_OPERATORS(
|
104
|
+
IMPLEMENT_AST_OPERATORS(SupportsRule);
|
105
|
+
IMPLEMENT_AST_OPERATORS(SupportsCondition);
|
106
|
+
IMPLEMENT_AST_OPERATORS(SupportsOperation);
|
107
|
+
IMPLEMENT_AST_OPERATORS(SupportsNegation);
|
108
|
+
IMPLEMENT_AST_OPERATORS(SupportsDeclaration);
|
109
109
|
IMPLEMENT_AST_OPERATORS(Supports_Interpolation);
|
110
110
|
|
111
111
|
/////////////////////////////////////////////////////////////////////////
|
@@ -39,79 +39,79 @@ namespace Sass {
|
|
39
39
|
////////////////////
|
40
40
|
// `@supports` rule.
|
41
41
|
////////////////////
|
42
|
-
class
|
43
|
-
ADD_PROPERTY(
|
42
|
+
class SupportsRule : public ParentStatement {
|
43
|
+
ADD_PROPERTY(SupportsConditionObj, condition)
|
44
44
|
public:
|
45
|
-
|
45
|
+
SupportsRule(SourceSpan pstate, SupportsConditionObj condition, Block_Obj block = {});
|
46
46
|
bool bubbles() override;
|
47
|
-
ATTACH_AST_OPERATIONS(
|
47
|
+
ATTACH_AST_OPERATIONS(SupportsRule)
|
48
48
|
ATTACH_CRTP_PERFORM_METHODS()
|
49
49
|
};
|
50
50
|
|
51
51
|
//////////////////////////////////////////////////////
|
52
52
|
// The abstract superclass of all Supports conditions.
|
53
53
|
//////////////////////////////////////////////////////
|
54
|
-
class
|
54
|
+
class SupportsCondition : public Expression {
|
55
55
|
public:
|
56
|
-
|
57
|
-
virtual bool needs_parens(
|
58
|
-
ATTACH_AST_OPERATIONS(
|
56
|
+
SupportsCondition(SourceSpan pstate);
|
57
|
+
virtual bool needs_parens(SupportsConditionObj cond) const { return false; }
|
58
|
+
ATTACH_AST_OPERATIONS(SupportsCondition)
|
59
59
|
ATTACH_CRTP_PERFORM_METHODS()
|
60
60
|
};
|
61
61
|
|
62
62
|
////////////////////////////////////////////////////////////
|
63
63
|
// An operator condition (e.g. `CONDITION1 and CONDITION2`).
|
64
64
|
////////////////////////////////////////////////////////////
|
65
|
-
class
|
65
|
+
class SupportsOperation : public SupportsCondition {
|
66
66
|
public:
|
67
67
|
enum Operand { AND, OR };
|
68
68
|
private:
|
69
|
-
ADD_PROPERTY(
|
70
|
-
ADD_PROPERTY(
|
69
|
+
ADD_PROPERTY(SupportsConditionObj, left);
|
70
|
+
ADD_PROPERTY(SupportsConditionObj, right);
|
71
71
|
ADD_PROPERTY(Operand, operand);
|
72
72
|
public:
|
73
|
-
|
74
|
-
virtual bool needs_parens(
|
75
|
-
ATTACH_AST_OPERATIONS(
|
73
|
+
SupportsOperation(SourceSpan pstate, SupportsConditionObj l, SupportsConditionObj r, Operand o);
|
74
|
+
virtual bool needs_parens(SupportsConditionObj cond) const override;
|
75
|
+
ATTACH_AST_OPERATIONS(SupportsOperation)
|
76
76
|
ATTACH_CRTP_PERFORM_METHODS()
|
77
77
|
};
|
78
78
|
|
79
79
|
//////////////////////////////////////////
|
80
80
|
// A negation condition (`not CONDITION`).
|
81
81
|
//////////////////////////////////////////
|
82
|
-
class
|
82
|
+
class SupportsNegation : public SupportsCondition {
|
83
83
|
private:
|
84
|
-
ADD_PROPERTY(
|
84
|
+
ADD_PROPERTY(SupportsConditionObj, condition);
|
85
85
|
public:
|
86
|
-
|
87
|
-
virtual bool needs_parens(
|
88
|
-
ATTACH_AST_OPERATIONS(
|
86
|
+
SupportsNegation(SourceSpan pstate, SupportsConditionObj c);
|
87
|
+
virtual bool needs_parens(SupportsConditionObj cond) const override;
|
88
|
+
ATTACH_AST_OPERATIONS(SupportsNegation)
|
89
89
|
ATTACH_CRTP_PERFORM_METHODS()
|
90
90
|
};
|
91
91
|
|
92
92
|
/////////////////////////////////////////////////////
|
93
93
|
// A declaration condition (e.g. `(feature: value)`).
|
94
94
|
/////////////////////////////////////////////////////
|
95
|
-
class
|
95
|
+
class SupportsDeclaration : public SupportsCondition {
|
96
96
|
private:
|
97
|
-
ADD_PROPERTY(
|
98
|
-
ADD_PROPERTY(
|
97
|
+
ADD_PROPERTY(ExpressionObj, feature);
|
98
|
+
ADD_PROPERTY(ExpressionObj, value);
|
99
99
|
public:
|
100
|
-
|
101
|
-
virtual bool needs_parens(
|
102
|
-
ATTACH_AST_OPERATIONS(
|
100
|
+
SupportsDeclaration(SourceSpan pstate, ExpressionObj f, ExpressionObj v);
|
101
|
+
virtual bool needs_parens(SupportsConditionObj cond) const override;
|
102
|
+
ATTACH_AST_OPERATIONS(SupportsDeclaration)
|
103
103
|
ATTACH_CRTP_PERFORM_METHODS()
|
104
104
|
};
|
105
105
|
|
106
106
|
///////////////////////////////////////////////
|
107
107
|
// An interpolation condition (e.g. `#{$var}`).
|
108
108
|
///////////////////////////////////////////////
|
109
|
-
class Supports_Interpolation : public
|
109
|
+
class Supports_Interpolation : public SupportsCondition {
|
110
110
|
private:
|
111
|
-
ADD_PROPERTY(
|
111
|
+
ADD_PROPERTY(ExpressionObj, value);
|
112
112
|
public:
|
113
|
-
Supports_Interpolation(
|
114
|
-
virtual bool needs_parens(
|
113
|
+
Supports_Interpolation(SourceSpan pstate, ExpressionObj v);
|
114
|
+
virtual bool needs_parens(SupportsConditionObj cond) const override;
|
115
115
|
ATTACH_AST_OPERATIONS(Supports_Interpolation)
|
116
116
|
ATTACH_CRTP_PERFORM_METHODS()
|
117
117
|
};
|