@@ -99,6 +99,8 @@ namespace Sass {
99
99
HASH_PROPERTY (bool , has_ns)
100
100
public:
101
101
SimpleSelector (SourceSpan pstate, sass::string n = " " );
102
+ // ordering within parent (peudos go last)
103
+ virtual int getSortOrder () const = 0;
102
104
virtual sass::string ns_name () const ;
103
105
size_t hash () const override ;
104
106
virtual bool empty () const ;
@@ -147,6 +149,7 @@ namespace Sass {
147
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 ;
@@ -162,6 +165,7 @@ namespace Sass {
162
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 ;
@@ -178,6 +182,7 @@ namespace Sass {
178
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
188
ATTACH_CMP_OPERATIONS (ClassSelector)
@@ -191,6 +196,7 @@ namespace Sass {
191
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 ; }
@@ -210,6 +216,7 @@ namespace Sass {
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 ;
@@ -230,6 +237,7 @@ namespace Sass {
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
@@ -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 ()
0 commit comments