sassc 2.3.0 → 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 +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
|
};
|