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.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/CHANGELOG.md +5 -0
  4. data/ext/libsass/VERSION +1 -1
  5. data/ext/libsass/include/sass/context.h +3 -0
  6. data/ext/libsass/src/MurmurHash2.hpp +91 -0
  7. data/ext/libsass/src/ast.cpp +117 -117
  8. data/ext/libsass/src/ast.hpp +160 -162
  9. data/ext/libsass/src/ast_def_macros.hpp +10 -10
  10. data/ext/libsass/src/ast_fwd_decl.cpp +2 -2
  11. data/ext/libsass/src/ast_fwd_decl.hpp +61 -52
  12. data/ext/libsass/src/ast_helpers.hpp +5 -5
  13. data/ext/libsass/src/ast_sel_cmp.cpp +18 -18
  14. data/ext/libsass/src/ast_sel_super.cpp +52 -52
  15. data/ext/libsass/src/ast_sel_unify.cpp +16 -16
  16. data/ext/libsass/src/ast_sel_weave.cpp +62 -62
  17. data/ext/libsass/src/ast_selectors.cpp +87 -77
  18. data/ext/libsass/src/ast_selectors.hpp +72 -62
  19. data/ext/libsass/src/ast_supports.cpp +35 -35
  20. data/ext/libsass/src/ast_supports.hpp +29 -29
  21. data/ext/libsass/src/ast_values.cpp +58 -58
  22. data/ext/libsass/src/ast_values.hpp +75 -75
  23. data/ext/libsass/src/backtrace.cpp +9 -9
  24. data/ext/libsass/src/backtrace.hpp +5 -5
  25. data/ext/libsass/src/base64vlq.cpp +2 -2
  26. data/ext/libsass/src/base64vlq.hpp +1 -1
  27. data/ext/libsass/src/bind.cpp +17 -17
  28. data/ext/libsass/src/bind.hpp +1 -1
  29. data/ext/libsass/src/c2ast.cpp +3 -3
  30. data/ext/libsass/src/c2ast.hpp +1 -1
  31. data/ext/libsass/src/check_nesting.cpp +36 -36
  32. data/ext/libsass/src/check_nesting.hpp +2 -2
  33. data/ext/libsass/src/color_maps.cpp +5 -5
  34. data/ext/libsass/src/color_maps.hpp +1 -1
  35. data/ext/libsass/src/context.cpp +63 -60
  36. data/ext/libsass/src/context.hpp +33 -33
  37. data/ext/libsass/src/cssize.cpp +30 -29
  38. data/ext/libsass/src/cssize.hpp +13 -13
  39. data/ext/libsass/src/dart_helpers.hpp +5 -5
  40. data/ext/libsass/src/debugger.hpp +127 -128
  41. data/ext/libsass/src/emitter.cpp +12 -12
  42. data/ext/libsass/src/emitter.hpp +10 -10
  43. data/ext/libsass/src/environment.cpp +27 -27
  44. data/ext/libsass/src/environment.hpp +24 -24
  45. data/ext/libsass/src/error_handling.cpp +42 -42
  46. data/ext/libsass/src/error_handling.hpp +38 -50
  47. data/ext/libsass/src/eval.cpp +138 -132
  48. data/ext/libsass/src/eval.hpp +17 -17
  49. data/ext/libsass/src/eval_selectors.cpp +3 -3
  50. data/ext/libsass/src/expand.cpp +70 -64
  51. data/ext/libsass/src/expand.hpp +12 -12
  52. data/ext/libsass/src/extender.cpp +55 -53
  53. data/ext/libsass/src/extender.hpp +14 -14
  54. data/ext/libsass/src/file.cpp +66 -58
  55. data/ext/libsass/src/file.hpp +23 -25
  56. data/ext/libsass/src/fn_colors.cpp +9 -9
  57. data/ext/libsass/src/fn_lists.cpp +18 -18
  58. data/ext/libsass/src/fn_maps.cpp +3 -3
  59. data/ext/libsass/src/fn_miscs.cpp +15 -15
  60. data/ext/libsass/src/fn_numbers.cpp +7 -7
  61. data/ext/libsass/src/fn_selectors.cpp +8 -8
  62. data/ext/libsass/src/fn_strings.cpp +34 -22
  63. data/ext/libsass/src/fn_utils.cpp +29 -26
  64. data/ext/libsass/src/fn_utils.hpp +10 -10
  65. data/ext/libsass/src/inspect.cpp +35 -34
  66. data/ext/libsass/src/inspect.hpp +21 -21
  67. data/ext/libsass/src/lexer.cpp +3 -1
  68. data/ext/libsass/src/listize.cpp +2 -2
  69. data/ext/libsass/src/mapping.hpp +1 -0
  70. data/ext/libsass/src/memory.hpp +12 -0
  71. data/ext/libsass/src/memory/allocator.cpp +48 -0
  72. data/ext/libsass/src/memory/allocator.hpp +138 -0
  73. data/ext/libsass/src/memory/config.hpp +20 -0
  74. data/ext/libsass/src/memory/memory_pool.hpp +186 -0
  75. data/ext/libsass/src/memory/{SharedPtr.cpp → shared_ptr.cpp} +2 -2
  76. data/ext/libsass/src/memory/{SharedPtr.hpp → shared_ptr.hpp} +18 -6
  77. data/ext/libsass/src/operation.hpp +44 -44
  78. data/ext/libsass/src/operators.cpp +18 -18
  79. data/ext/libsass/src/operators.hpp +11 -11
  80. data/ext/libsass/src/ordered_map.hpp +18 -18
  81. data/ext/libsass/src/output.cpp +16 -16
  82. data/ext/libsass/src/output.hpp +5 -5
  83. data/ext/libsass/src/parser.cpp +327 -345
  84. data/ext/libsass/src/parser.hpp +77 -87
  85. data/ext/libsass/src/parser_selectors.cpp +6 -6
  86. data/ext/libsass/src/permutate.hpp +39 -15
  87. data/ext/libsass/src/plugins.cpp +7 -7
  88. data/ext/libsass/src/plugins.hpp +8 -8
  89. data/ext/libsass/src/position.cpp +7 -26
  90. data/ext/libsass/src/position.hpp +44 -21
  91. data/ext/libsass/src/remove_placeholders.cpp +4 -4
  92. data/ext/libsass/src/remove_placeholders.hpp +3 -3
  93. data/ext/libsass/src/sass.cpp +16 -15
  94. data/ext/libsass/src/sass.hpp +9 -5
  95. data/ext/libsass/src/sass_context.cpp +52 -34
  96. data/ext/libsass/src/sass_values.cpp +8 -10
  97. data/ext/libsass/src/settings.hpp +19 -0
  98. data/ext/libsass/src/source.cpp +69 -0
  99. data/ext/libsass/src/source.hpp +95 -0
  100. data/ext/libsass/src/source_data.hpp +32 -0
  101. data/ext/libsass/src/source_map.cpp +22 -18
  102. data/ext/libsass/src/source_map.hpp +12 -9
  103. data/ext/libsass/src/units.cpp +19 -19
  104. data/ext/libsass/src/units.hpp +8 -8
  105. data/ext/libsass/src/utf8_string.cpp +9 -10
  106. data/ext/libsass/src/utf8_string.hpp +7 -6
  107. data/ext/libsass/src/util.cpp +38 -38
  108. data/ext/libsass/src/util.hpp +18 -18
  109. data/ext/libsass/src/util_string.cpp +13 -13
  110. data/ext/libsass/src/util_string.hpp +9 -8
  111. data/ext/libsass/src/values.cpp +12 -12
  112. data/lib/sassc/native.rb +3 -5
  113. data/lib/sassc/version.rb +1 -1
  114. data/test/native_test.rb +4 -4
  115. metadata +14 -5
  116. data/lib/sassc/native/lib_c.rb +0 -21
@@ -13,14 +13,14 @@ namespace Sass {
13
13
  // ##########################################################################
14
14
  // ToDo: fine-tune API to avoid unnecessary wrapper allocations
15
15
  // ##########################################################################
16
- std::vector<std::vector<SelectorComponentObj>> unifyComplex(
17
- const std::vector<std::vector<SelectorComponentObj>>& complexes)
16
+ sass::vector<sass::vector<SelectorComponentObj>> unifyComplex(
17
+ const sass::vector<sass::vector<SelectorComponentObj>>& complexes)
18
18
  {
19
19
 
20
20
  SASS_ASSERT(!complexes.empty(), "Can't unify empty list");
21
21
  if (complexes.size() == 1) return complexes;
22
22
 
23
- CompoundSelectorObj unifiedBase = SASS_MEMORY_NEW(CompoundSelector, ParserState("[phony]"));
23
+ CompoundSelectorObj unifiedBase = SASS_MEMORY_NEW(CompoundSelector, SourceSpan("[phony]"));
24
24
  for (auto complex : complexes) {
25
25
  SelectorComponentObj base = complex.back();
26
26
  if (CompoundSelector * comp = base->getCompound()) {
@@ -39,9 +39,9 @@ namespace Sass {
39
39
  }
40
40
  }
41
41
 
42
- std::vector<std::vector<SelectorComponentObj>> complexesWithoutBases;
42
+ sass::vector<sass::vector<SelectorComponentObj>> complexesWithoutBases;
43
43
  for (size_t i = 0; i < complexes.size(); i += 1) {
44
- std::vector<SelectorComponentObj> sel = complexes[i];
44
+ sass::vector<SelectorComponentObj> sel = complexes[i];
45
45
  sel.pop_back(); // remove last item (base) from the list
46
46
  complexesWithoutBases.push_back(std::move(sel));
47
47
  }
@@ -120,13 +120,13 @@ namespace Sass {
120
120
  // ##########################################################################
121
121
  // This is implemented in `selector/type.dart` as `PseudoSelector::unify`
122
122
  // ##########################################################################
123
- CompoundSelector* Type_Selector::unifyWith(CompoundSelector* rhs)
123
+ CompoundSelector* TypeSelector::unifyWith(CompoundSelector* rhs)
124
124
  {
125
125
  if (rhs->empty()) {
126
126
  rhs->append(this);
127
127
  return rhs;
128
128
  }
129
- Type_Selector* type = Cast<Type_Selector>(rhs->at(0));
129
+ TypeSelector* type = Cast<TypeSelector>(rhs->at(0));
130
130
  if (type != nullptr) {
131
131
  SimpleSelector* unified = unifyWith(type);
132
132
  if (unified == nullptr) {
@@ -143,10 +143,10 @@ namespace Sass {
143
143
  // ##########################################################################
144
144
  // This is implemented in `selector/id.dart` as `PseudoSelector::unify`
145
145
  // ##########################################################################
146
- CompoundSelector* Id_Selector::unifyWith(CompoundSelector* rhs)
146
+ CompoundSelector* IDSelector::unifyWith(CompoundSelector* rhs)
147
147
  {
148
148
  for (const SimpleSelector* sel : rhs->elements()) {
149
- if (const Id_Selector* id_sel = Cast<Id_Selector>(sel)) {
149
+ if (const IDSelector* id_sel = Cast<IDSelector>(sel)) {
150
150
  if (id_sel->name() != name()) return nullptr;
151
151
  }
152
152
  }
@@ -156,7 +156,7 @@ namespace Sass {
156
156
  // ##########################################################################
157
157
  // This is implemented in `selector/pseudo.dart` as `PseudoSelector::unify`
158
158
  // ##########################################################################
159
- CompoundSelector* Pseudo_Selector::unifyWith(CompoundSelector* compound)
159
+ CompoundSelector* PseudoSelector::unifyWith(CompoundSelector* compound)
160
160
  {
161
161
 
162
162
  if (compound->length() == 1 && compound->first()->is_universal()) {
@@ -174,7 +174,7 @@ namespace Sass {
174
174
  bool addedThis = false;
175
175
  for (auto simple : compound->elements()) {
176
176
  // Make sure pseudo selectors always come last.
177
- if (Pseudo_Selector_Obj pseudo = simple->getPseudoSelector()) {
177
+ if (PseudoSelectorObj pseudo = simple->getPseudoSelector()) {
178
178
  if (pseudo->isElement()) {
179
179
  // A given compound selector may only contain one pseudo element. If
180
180
  // [compound] has a different one than [this], unification fails.
@@ -197,7 +197,7 @@ namespace Sass {
197
197
  return result.detach();
198
198
 
199
199
  }
200
- // EO Pseudo_Selector::unifyWith(CompoundSelector*
200
+ // EO PseudoSelector::unifyWith(CompoundSelector*
201
201
 
202
202
  // ##########################################################################
203
203
  // This is implemented in `extend/functions.dart` as `unifyUniversalAndElement`
@@ -206,7 +206,7 @@ namespace Sass {
206
206
  // or [TypeSelector]s. If no such selector can be produced, returns `null`.
207
207
  // Note: libsass handles universal selector directly within the type selector
208
208
  // ##########################################################################
209
- SimpleSelector* Type_Selector::unifyWith(const SimpleSelector* rhs)
209
+ SimpleSelector* TypeSelector::unifyWith(const SimpleSelector* rhs)
210
210
  {
211
211
  bool rhs_ns = false;
212
212
  if (!(is_ns_eq(*rhs) || rhs->is_universal_ns())) {
@@ -229,7 +229,7 @@ namespace Sass {
229
229
  if (rhs_name) name(rhs->name());
230
230
  return this;
231
231
  }
232
- // EO Type_Selector::unifyWith(const SimpleSelector*)
232
+ // EO TypeSelector::unifyWith(const SimpleSelector*)
233
233
 
234
234
  // ##########################################################################
235
235
  // Unify two complex selectors. Internally calls `unifyComplex`
@@ -238,9 +238,9 @@ namespace Sass {
238
238
  SelectorList* ComplexSelector::unifyWith(ComplexSelector* rhs)
239
239
  {
240
240
  SelectorListObj list = SASS_MEMORY_NEW(SelectorList, pstate());
241
- std::vector<std::vector<SelectorComponentObj>> rv =
241
+ sass::vector<sass::vector<SelectorComponentObj>> rv =
242
242
  unifyComplex({ elements(), rhs->elements() });
243
- for (std::vector<SelectorComponentObj> items : rv) {
243
+ for (sass::vector<SelectorComponentObj> items : rv) {
244
244
  ComplexSelectorObj sel = SASS_MEMORY_NEW(ComplexSelector, pstate());
245
245
  sel->elements() = std::move(items);
246
246
  list->append(sel);
@@ -24,8 +24,8 @@ namespace Sass {
24
24
  // ##########################################################################
25
25
  bool isUnique(const SimpleSelector* simple)
26
26
  {
27
- if (Cast<Id_Selector>(simple)) return true;
28
- if (const Pseudo_Selector * pseudo = Cast<Pseudo_Selector>(simple)) {
27
+ if (Cast<IDSelector>(simple)) return true;
28
+ if (const PseudoSelector * pseudo = Cast<PseudoSelector>(simple)) {
29
29
  if (pseudo->is_pseudo_element()) return true;
30
30
  }
31
31
  return false;
@@ -38,11 +38,11 @@ namespace Sass {
38
38
  // selectors contain the same unique simple selector, such as an ID.
39
39
  // ##########################################################################
40
40
  bool mustUnify(
41
- const std::vector<SelectorComponentObj>& complex1,
42
- const std::vector<SelectorComponentObj>& complex2)
41
+ const sass::vector<SelectorComponentObj>& complex1,
42
+ const sass::vector<SelectorComponentObj>& complex2)
43
43
  {
44
44
 
45
- std::vector<const SimpleSelector*> uniqueSelectors1;
45
+ sass::vector<const SimpleSelector*> uniqueSelectors1;
46
46
  for (const SelectorComponent* component : complex1) {
47
47
  if (const CompoundSelector * compound = component->getCompound()) {
48
48
  for (const SimpleSelector* sel : compound->elements()) {
@@ -76,9 +76,9 @@ namespace Sass {
76
76
  // Helper function used by `weaveParents`
77
77
  // ##########################################################################
78
78
  bool cmpGroups(
79
- const std::vector<SelectorComponentObj>& group1,
80
- const std::vector<SelectorComponentObj>& group2,
81
- std::vector<SelectorComponentObj>& select)
79
+ const sass::vector<SelectorComponentObj>& group1,
80
+ const sass::vector<SelectorComponentObj>& group2,
81
+ sass::vector<SelectorComponentObj>& select)
82
82
  {
83
83
 
84
84
  if (group1.size() == group2.size() && std::equal(group1.begin(), group1.end(), group2.begin(), PtrObjEqualityFn<SelectorComponent>)) {
@@ -109,7 +109,7 @@ namespace Sass {
109
109
  return false;
110
110
  }
111
111
 
112
- std::vector<std::vector<SelectorComponentObj>> unified
112
+ sass::vector<sass::vector<SelectorComponentObj>> unified
113
113
  = unifyComplex({ group1, group2 });
114
114
  if (unified.empty()) return false;
115
115
  if (unified.size() > 1) return false;
@@ -131,8 +131,8 @@ namespace Sass {
131
131
  // Helper function used by `weaveParents`
132
132
  // ##########################################################################
133
133
  bool cmpChunkForEmptySequence(
134
- const std::vector<std::vector<SelectorComponentObj>>& seq,
135
- const std::vector<SelectorComponentObj>& group)
134
+ const sass::vector<sass::vector<SelectorComponentObj>>& seq,
135
+ const sass::vector<SelectorComponentObj>& group)
136
136
  {
137
137
  return seq.empty();
138
138
  }
@@ -142,8 +142,8 @@ namespace Sass {
142
142
  // Helper function used by `weaveParents`
143
143
  // ##########################################################################
144
144
  bool cmpChunkForParentSuperselector(
145
- const std::vector< std::vector<SelectorComponentObj>>& seq,
146
- const std::vector<SelectorComponentObj>& group)
145
+ const sass::vector<sass::vector<SelectorComponentObj>>& seq,
146
+ const sass::vector<SelectorComponentObj>& group)
147
147
  {
148
148
  return seq.empty() || complexIsParentSuperselector(seq.front(), group);
149
149
  }
@@ -159,18 +159,18 @@ namespace Sass {
159
159
  // (1 2 A B C)]`. The queues would then contain `(D E)` and `(3 4 5)`.
160
160
  // ##########################################################################
161
161
  template <class T>
162
- std::vector<std::vector<T>> getChunks(
163
- std::vector<T>& queue1, std::vector<T>& queue2,
164
- const T& group, bool(*done)(const std::vector<T>&, const T&)
162
+ sass::vector<sass::vector<T>> getChunks(
163
+ sass::vector<T>& queue1, sass::vector<T>& queue2,
164
+ const T& group, bool(*done)(const sass::vector<T>&, const T&)
165
165
  ) {
166
166
 
167
- std::vector<T> chunk1;
167
+ sass::vector<T> chunk1;
168
168
  while (!done(queue1, group)) {
169
169
  chunk1.push_back(queue1.front());
170
170
  queue1.erase(queue1.begin());
171
171
  }
172
172
 
173
- std::vector<T> chunk2;
173
+ sass::vector<T> chunk2;
174
174
  while (!done(queue2, group)) {
175
175
  chunk2.push_back(queue2.front());
176
176
  queue2.erase(queue2.begin());
@@ -180,7 +180,7 @@ namespace Sass {
180
180
  else if (chunk1.empty()) return { chunk2 };
181
181
  else if (chunk2.empty()) return { chunk1 };
182
182
 
183
- std::vector<T> choice1(chunk1), choice2(chunk2);
183
+ sass::vector<T> choice1(chunk1), choice2(chunk2);
184
184
  std::move(std::begin(chunk2), std::end(chunk2),
185
185
  std::inserter(choice1, std::end(choice1)));
186
186
  std::move(std::begin(chunk1), std::end(chunk1),
@@ -193,7 +193,7 @@ namespace Sass {
193
193
  // If the first element of [queue] has a `::root`
194
194
  // selector, removes and returns that element.
195
195
  // ##########################################################################
196
- CompoundSelectorObj getFirstIfRoot(std::vector<SelectorComponentObj>& queue) {
196
+ CompoundSelectorObj getFirstIfRoot(sass::vector<SelectorComponentObj>& queue) {
197
197
  if (queue.empty()) return {};
198
198
  SelectorComponent* first = queue.front();
199
199
  if (CompoundSelector* sel = Cast<CompoundSelector>(first)) {
@@ -210,12 +210,12 @@ namespace Sass {
210
210
  // contains two adjacent [ComplexSelector]s. For example,
211
211
  // `(A B > C D + E ~ > G)` is grouped into `[(A) (B > C) (D + E ~ > G)]`.
212
212
  // ##########################################################################
213
- std::vector<std::vector<SelectorComponentObj>> groupSelectors(
214
- const std::vector<SelectorComponentObj>& components)
213
+ sass::vector<sass::vector<SelectorComponentObj>> groupSelectors(
214
+ const sass::vector<SelectorComponentObj>& components)
215
215
  {
216
216
  bool lastWasCompound = false;
217
- std::vector<SelectorComponentObj> group;
218
- std::vector<std::vector<SelectorComponentObj>> groups;
217
+ sass::vector<SelectorComponentObj> group;
218
+ sass::vector<sass::vector<SelectorComponentObj>> groups;
219
219
  for (size_t i = 0; i < components.size(); i += 1) {
220
220
  if (CompoundSelector* compound = components[i]->getCompound()) {
221
221
  if (lastWasCompound) {
@@ -244,19 +244,19 @@ namespace Sass {
244
244
  // If the combinators can't be merged, returns `null`.
245
245
  // ##########################################################################
246
246
  bool mergeInitialCombinators(
247
- std::vector<SelectorComponentObj>& components1,
248
- std::vector<SelectorComponentObj>& components2,
249
- std::vector<SelectorComponentObj>& result)
247
+ sass::vector<SelectorComponentObj>& components1,
248
+ sass::vector<SelectorComponentObj>& components2,
249
+ sass::vector<SelectorComponentObj>& result)
250
250
  {
251
251
 
252
- std::vector<SelectorComponentObj> combinators1;
252
+ sass::vector<SelectorComponentObj> combinators1;
253
253
  while (!components1.empty() && Cast<SelectorCombinator>(components1.front())) {
254
254
  SelectorCombinatorObj front = Cast<SelectorCombinator>(components1.front());
255
255
  components1.erase(components1.begin());
256
256
  combinators1.push_back(front);
257
257
  }
258
258
 
259
- std::vector<SelectorComponentObj> combinators2;
259
+ sass::vector<SelectorComponentObj> combinators2;
260
260
  while (!components2.empty() && Cast<SelectorCombinator>(components2.front())) {
261
261
  SelectorCombinatorObj front = Cast<SelectorCombinator>(components2.front());
262
262
  components2.erase(components2.begin());
@@ -265,7 +265,7 @@ namespace Sass {
265
265
 
266
266
  // If neither sequence of combinators is a subsequence
267
267
  // of the other, they cannot be merged successfully.
268
- std::vector<SelectorComponentObj> LCS = lcs<SelectorComponentObj>(combinators1, combinators2);
268
+ sass::vector<SelectorComponentObj> LCS = lcs<SelectorComponentObj>(combinators1, combinators2);
269
269
 
270
270
  if (ListEquality(LCS, combinators1, PtrObjEqualityFn<SelectorComponent>)) {
271
271
  result = combinators2;
@@ -288,9 +288,9 @@ namespace Sass {
288
288
  // empty list. If the sequences can't be merged, returns `null`.
289
289
  // ##########################################################################
290
290
  bool mergeFinalCombinators(
291
- std::vector<SelectorComponentObj>& components1,
292
- std::vector<SelectorComponentObj>& components2,
293
- std::vector<std::vector<std::vector<SelectorComponentObj>>>& result)
291
+ sass::vector<SelectorComponentObj>& components1,
292
+ sass::vector<SelectorComponentObj>& components2,
293
+ sass::vector<sass::vector<sass::vector<SelectorComponentObj>>>& result)
294
294
  {
295
295
 
296
296
  if (components1.empty() || !Cast<SelectorCombinator>(components1.back())) {
@@ -299,14 +299,14 @@ namespace Sass {
299
299
  }
300
300
  }
301
301
 
302
- std::vector<SelectorComponentObj> combinators1;
302
+ sass::vector<SelectorComponentObj> combinators1;
303
303
  while (!components1.empty() && Cast<SelectorCombinator>(components1.back())) {
304
304
  SelectorCombinatorObj back = Cast<SelectorCombinator>(components1.back());
305
305
  components1.erase(components1.end() - 1);
306
306
  combinators1.push_back(back);
307
307
  }
308
308
 
309
- std::vector<SelectorComponentObj> combinators2;
309
+ sass::vector<SelectorComponentObj> combinators2;
310
310
  while (!components2.empty() && Cast<SelectorCombinator>(components2.back())) {
311
311
  SelectorCombinatorObj back = Cast<SelectorCombinator>(components2.back());
312
312
  components2.erase(components2.end() - 1);
@@ -356,7 +356,7 @@ namespace Sass {
356
356
  result.push_back({ { compound1, combinator1 } });
357
357
  }
358
358
  else {
359
- std::vector<std::vector<SelectorComponentObj>> choices;
359
+ sass::vector<sass::vector<SelectorComponentObj>> choices;
360
360
  choices.push_back({ compound1, combinator1, compound2, combinator2 });
361
361
  choices.push_back({ compound2, combinator2, compound1, combinator1 });
362
362
  if (CompoundSelector* unified = compound1->unifyWith(compound2)) {
@@ -378,7 +378,7 @@ namespace Sass {
378
378
  }
379
379
  else {
380
380
  CompoundSelectorObj unified = compound1->unifyWith(compound2);
381
- std::vector<std::vector<SelectorComponentObj>> items;
381
+ sass::vector<sass::vector<SelectorComponentObj>> items;
382
382
 
383
383
  if (!unified.isNull()) {
384
384
  items.push_back({
@@ -463,10 +463,10 @@ namespace Sass {
463
463
  // exponential output for very little gain. The selector `.D (.A .B)`
464
464
  // is represented as the list `[[.D], [.A, .B]]`.
465
465
  // ##########################################################################
466
- std::vector<std::vector<SelectorComponentObj>> weave(
467
- const std::vector<std::vector<SelectorComponentObj>>& complexes) {
466
+ sass::vector<sass::vector<SelectorComponentObj>> weave(
467
+ const sass::vector<sass::vector<SelectorComponentObj>>& complexes) {
468
468
 
469
- std::vector<std::vector<SelectorComponentObj>> prefixes;
469
+ sass::vector<sass::vector<SelectorComponentObj>> prefixes;
470
470
 
471
471
  prefixes.push_back(complexes.at(0));
472
472
 
@@ -475,7 +475,7 @@ namespace Sass {
475
475
  if (complexes[i].empty()) {
476
476
  continue;
477
477
  }
478
- const std::vector<SelectorComponentObj>& complex = complexes[i];
478
+ const sass::vector<SelectorComponentObj>& complex = complexes[i];
479
479
  SelectorComponent* target = complex.back();
480
480
  if (complex.size() == 1) {
481
481
  for (auto& prefix : prefixes) {
@@ -484,13 +484,13 @@ namespace Sass {
484
484
  continue;
485
485
  }
486
486
 
487
- std::vector<SelectorComponentObj> parents(complex);
487
+ sass::vector<SelectorComponentObj> parents(complex);
488
488
 
489
489
  parents.pop_back();
490
490
 
491
- std::vector<std::vector<SelectorComponentObj>> newPrefixes;
492
- for (std::vector<SelectorComponentObj> prefix : prefixes) {
493
- std::vector<std::vector<SelectorComponentObj>>
491
+ sass::vector<sass::vector<SelectorComponentObj>> newPrefixes;
492
+ for (sass::vector<SelectorComponentObj> prefix : prefixes) {
493
+ sass::vector<sass::vector<SelectorComponentObj>>
494
494
  parentPrefixes = weaveParents(prefix, parents);
495
495
  if (parentPrefixes.empty()) continue;
496
496
  for (auto& parentPrefix : parentPrefixes) {
@@ -519,13 +519,13 @@ namespace Sass {
519
519
  // elements matched by `A X` and all elements matched by `B X`. Some `AB_i`
520
520
  // are elided to reduce the size of the output.
521
521
  // ##########################################################################
522
- std::vector<std::vector<SelectorComponentObj>> weaveParents(
523
- std::vector<SelectorComponentObj> queue1,
524
- std::vector<SelectorComponentObj> queue2)
522
+ sass::vector<sass::vector<SelectorComponentObj>> weaveParents(
523
+ sass::vector<SelectorComponentObj> queue1,
524
+ sass::vector<SelectorComponentObj> queue2)
525
525
  {
526
526
 
527
- std::vector<SelectorComponentObj> leads;
528
- std::vector<std::vector<std::vector<SelectorComponentObj>>> trails;
527
+ sass::vector<SelectorComponentObj> leads;
528
+ sass::vector<sass::vector<sass::vector<SelectorComponentObj>>> trails;
529
529
  if (!mergeInitialCombinators(queue1, queue2, leads)) return {};
530
530
  if (!mergeFinalCombinators(queue1, queue2, trails)) return {};
531
531
  // list comes out in reverse order for performance
@@ -550,27 +550,27 @@ namespace Sass {
550
550
  }
551
551
 
552
552
  // group into sub-lists so no sub-list contains two adjacent ComplexSelectors.
553
- std::vector<std::vector<SelectorComponentObj>> groups1 = groupSelectors(queue1);
554
- std::vector<std::vector<SelectorComponentObj>> groups2 = groupSelectors(queue2);
553
+ sass::vector<sass::vector<SelectorComponentObj>> groups1 = groupSelectors(queue1);
554
+ sass::vector<sass::vector<SelectorComponentObj>> groups2 = groupSelectors(queue2);
555
555
 
556
556
  // The main array to store our choices that will be permutated
557
- std::vector<std::vector<std::vector<SelectorComponentObj>>> choices;
557
+ sass::vector<sass::vector<sass::vector<SelectorComponentObj>>> choices;
558
558
 
559
559
  // append initial combinators
560
560
  choices.push_back({ leads });
561
561
 
562
- std::vector<std::vector<SelectorComponentObj>> LCS =
563
- lcs<std::vector<SelectorComponentObj>>(groups1, groups2, cmpGroups);
562
+ sass::vector<sass::vector<SelectorComponentObj>> LCS =
563
+ lcs<sass::vector<SelectorComponentObj>>(groups1, groups2, cmpGroups);
564
564
 
565
565
  for (auto group : LCS) {
566
566
 
567
567
  // Create junks from groups1 and groups2
568
- std::vector<std::vector<std::vector<SelectorComponentObj>>>
569
- chunks = getChunks<std::vector<SelectorComponentObj>>(
568
+ sass::vector<sass::vector<sass::vector<SelectorComponentObj>>>
569
+ chunks = getChunks<sass::vector<SelectorComponentObj>>(
570
570
  groups1, groups2, group, cmpChunkForParentSuperselector);
571
571
 
572
572
  // Create expanded array by flattening chunks2 inner
573
- std::vector<std::vector<SelectorComponentObj>>
573
+ sass::vector<sass::vector<SelectorComponentObj>>
574
574
  expanded = flattenInner(chunks);
575
575
 
576
576
  // Prepare data structures
@@ -586,8 +586,8 @@ namespace Sass {
586
586
  }
587
587
 
588
588
  // Create junks from groups1 and groups2
589
- std::vector<std::vector<std::vector<SelectorComponentObj>>>
590
- chunks = getChunks<std::vector<SelectorComponentObj>>(
589
+ sass::vector<sass::vector<sass::vector<SelectorComponentObj>>>
590
+ chunks = getChunks<sass::vector<SelectorComponentObj>>(
591
591
  groups1, groups2, {}, cmpChunkForEmptySequence);
592
592
 
593
593
  // Append chunks with inner arrays flattened
@@ -599,10 +599,10 @@ namespace Sass {
599
599
 
600
600
  // move all non empty items to the front, then erase the trailing ones
601
601
  choices.erase(std::remove_if(choices.begin(), choices.end(), checkForEmptyChild
602
- <std::vector<std::vector<SelectorComponentObj>>>), choices.end());
602
+ <sass::vector<sass::vector<SelectorComponentObj>>>), choices.end());
603
603
 
604
604
  // permutate all possible paths through selectors
605
- std::vector<std::vector<SelectorComponentObj>>
605
+ sass::vector<sass::vector<SelectorComponentObj>>
606
606
  results = flattenInner(permutate(choices));
607
607
 
608
608
  return results;
@@ -11,7 +11,7 @@ namespace Sass {
11
11
  /////////////////////////////////////////////////////////////////////////
12
12
  /////////////////////////////////////////////////////////////////////////
13
13
 
14
- Selector::Selector(ParserState pstate)
14
+ Selector::Selector(SourceSpan pstate)
15
15
  : Expression(pstate),
16
16
  hash_(0)
17
17
  { concrete_type(SELECTOR); }
@@ -30,7 +30,7 @@ namespace Sass {
30
30
  /////////////////////////////////////////////////////////////////////////
31
31
  /////////////////////////////////////////////////////////////////////////
32
32
 
33
- Selector_Schema::Selector_Schema(ParserState pstate, String_Obj c)
33
+ Selector_Schema::Selector_Schema(SourceSpan pstate, String_Obj c)
34
34
  : AST_Node(pstate),
35
35
  contents_(c),
36
36
  connect_parent_(true),
@@ -69,12 +69,12 @@ namespace Sass {
69
69
  /////////////////////////////////////////////////////////////////////////
70
70
  /////////////////////////////////////////////////////////////////////////
71
71
 
72
- SimpleSelector::SimpleSelector(ParserState pstate, std::string n)
72
+ SimpleSelector::SimpleSelector(SourceSpan pstate, sass::string n)
73
73
  : Selector(pstate), ns_(""), name_(n), has_ns_(false)
74
74
  {
75
75
  size_t pos = n.find('|');
76
76
  // found some namespace
77
- if (pos != std::string::npos) {
77
+ if (pos != sass::string::npos) {
78
78
  has_ns_ = true;
79
79
  ns_ = n.substr(0, pos);
80
80
  name_ = n.substr(pos + 1);
@@ -87,7 +87,7 @@ namespace Sass {
87
87
  has_ns_(ptr->has_ns_)
88
88
  { }
89
89
 
90
- std::string SimpleSelector::ns_name() const
90
+ sass::string SimpleSelector::ns_name() const
91
91
  {
92
92
  if (!has_ns_) return name_;
93
93
  else return ns_ + "|" + name_;
@@ -174,31 +174,31 @@ namespace Sass {
174
174
  /////////////////////////////////////////////////////////////////////////
175
175
  /////////////////////////////////////////////////////////////////////////
176
176
 
177
- Placeholder_Selector::Placeholder_Selector(ParserState pstate, std::string n)
177
+ PlaceholderSelector::PlaceholderSelector(SourceSpan pstate, sass::string n)
178
178
  : SimpleSelector(pstate, n)
179
179
  { simple_type(PLACEHOLDER_SEL); }
180
- Placeholder_Selector::Placeholder_Selector(const Placeholder_Selector* ptr)
180
+ PlaceholderSelector::PlaceholderSelector(const PlaceholderSelector* ptr)
181
181
  : SimpleSelector(ptr)
182
182
  { simple_type(PLACEHOLDER_SEL); }
183
- unsigned long Placeholder_Selector::specificity() const
183
+ unsigned long PlaceholderSelector::specificity() const
184
184
  {
185
185
  return Constants::Specificity_Base;
186
186
  }
187
- bool Placeholder_Selector::has_placeholder() {
187
+ bool PlaceholderSelector::has_placeholder() {
188
188
  return true;
189
189
  }
190
190
 
191
191
  /////////////////////////////////////////////////////////////////////////
192
192
  /////////////////////////////////////////////////////////////////////////
193
193
 
194
- Type_Selector::Type_Selector(ParserState pstate, std::string n)
194
+ TypeSelector::TypeSelector(SourceSpan pstate, sass::string n)
195
195
  : SimpleSelector(pstate, n)
196
196
  { simple_type(TYPE_SEL); }
197
- Type_Selector::Type_Selector(const Type_Selector* ptr)
197
+ TypeSelector::TypeSelector(const TypeSelector* ptr)
198
198
  : SimpleSelector(ptr)
199
199
  { simple_type(TYPE_SEL); }
200
200
 
201
- unsigned long Type_Selector::specificity() const
201
+ unsigned long TypeSelector::specificity() const
202
202
  {
203
203
  if (name() == "*") return 0;
204
204
  else return Constants::Specificity_Element;
@@ -207,14 +207,14 @@ namespace Sass {
207
207
  /////////////////////////////////////////////////////////////////////////
208
208
  /////////////////////////////////////////////////////////////////////////
209
209
 
210
- Class_Selector::Class_Selector(ParserState pstate, std::string n)
210
+ ClassSelector::ClassSelector(SourceSpan pstate, sass::string n)
211
211
  : SimpleSelector(pstate, n)
212
212
  { simple_type(CLASS_SEL); }
213
- Class_Selector::Class_Selector(const Class_Selector* ptr)
213
+ ClassSelector::ClassSelector(const ClassSelector* ptr)
214
214
  : SimpleSelector(ptr)
215
215
  { simple_type(CLASS_SEL); }
216
216
 
217
- unsigned long Class_Selector::specificity() const
217
+ unsigned long ClassSelector::specificity() const
218
218
  {
219
219
  return Constants::Specificity_Class;
220
220
  }
@@ -222,14 +222,14 @@ namespace Sass {
222
222
  /////////////////////////////////////////////////////////////////////////
223
223
  /////////////////////////////////////////////////////////////////////////
224
224
 
225
- Id_Selector::Id_Selector(ParserState pstate, std::string n)
225
+ IDSelector::IDSelector(SourceSpan pstate, sass::string n)
226
226
  : SimpleSelector(pstate, n)
227
227
  { simple_type(ID_SEL); }
228
- Id_Selector::Id_Selector(const Id_Selector* ptr)
228
+ IDSelector::IDSelector(const IDSelector* ptr)
229
229
  : SimpleSelector(ptr)
230
230
  { simple_type(ID_SEL); }
231
231
 
232
- unsigned long Id_Selector::specificity() const
232
+ unsigned long IDSelector::specificity() const
233
233
  {
234
234
  return Constants::Specificity_ID;
235
235
  }
@@ -237,27 +237,27 @@ namespace Sass {
237
237
  /////////////////////////////////////////////////////////////////////////
238
238
  /////////////////////////////////////////////////////////////////////////
239
239
 
240
- Attribute_Selector::Attribute_Selector(ParserState pstate, std::string n, std::string m, String_Obj v, char o)
240
+ AttributeSelector::AttributeSelector(SourceSpan pstate, sass::string n, sass::string m, String_Obj v, char o)
241
241
  : SimpleSelector(pstate, n), matcher_(m), value_(v), modifier_(o)
242
242
  { simple_type(ATTRIBUTE_SEL); }
243
- Attribute_Selector::Attribute_Selector(const Attribute_Selector* ptr)
243
+ AttributeSelector::AttributeSelector(const AttributeSelector* ptr)
244
244
  : SimpleSelector(ptr),
245
245
  matcher_(ptr->matcher_),
246
246
  value_(ptr->value_),
247
247
  modifier_(ptr->modifier_)
248
248
  { simple_type(ATTRIBUTE_SEL); }
249
249
 
250
- size_t Attribute_Selector::hash() const
250
+ size_t AttributeSelector::hash() const
251
251
  {
252
252
  if (hash_ == 0) {
253
253
  hash_combine(hash_, SimpleSelector::hash());
254
- hash_combine(hash_, std::hash<std::string>()(matcher()));
254
+ hash_combine(hash_, std::hash<sass::string>()(matcher()));
255
255
  if (value_) hash_combine(hash_, value_->hash());
256
256
  }
257
257
  return hash_;
258
258
  }
259
259
 
260
- unsigned long Attribute_Selector::specificity() const
260
+ unsigned long AttributeSelector::specificity() const
261
261
  {
262
262
  return Constants::Specificity_Attr;
263
263
  }
@@ -265,7 +265,7 @@ namespace Sass {
265
265
  /////////////////////////////////////////////////////////////////////////
266
266
  /////////////////////////////////////////////////////////////////////////
267
267
 
268
- Pseudo_Selector::Pseudo_Selector(ParserState pstate, std::string name, bool element)
268
+ PseudoSelector::PseudoSelector(SourceSpan pstate, sass::string name, bool element)
269
269
  : SimpleSelector(pstate, name),
270
270
  normalized_(Util::unvendor(name)),
271
271
  argument_({}),
@@ -273,7 +273,7 @@ namespace Sass {
273
273
  isSyntacticClass_(!element),
274
274
  isClass_(!element && !isFakePseudoElement(normalized_))
275
275
  { simple_type(PSEUDO_SEL); }
276
- Pseudo_Selector::Pseudo_Selector(const Pseudo_Selector* ptr)
276
+ PseudoSelector::PseudoSelector(const PseudoSelector* ptr)
277
277
  : SimpleSelector(ptr),
278
278
  normalized_(ptr->normalized()),
279
279
  argument_(ptr->argument()),
@@ -290,12 +290,12 @@ namespace Sass {
290
290
  // in CSS levels 1 and 2 (namely, :first-line, :first-letter, :before and
291
291
  // :after). This compatibility is not allowed for the new pseudo-elements
292
292
  // introduced in this specification.
293
- bool Pseudo_Selector::is_pseudo_element() const
293
+ bool PseudoSelector::is_pseudo_element() const
294
294
  {
295
295
  return isElement();
296
296
  }
297
297
 
298
- size_t Pseudo_Selector::hash() const
298
+ size_t PseudoSelector::hash() const
299
299
  {
300
300
  if (hash_ == 0) {
301
301
  hash_combine(hash_, SimpleSelector::hash());
@@ -305,34 +305,34 @@ namespace Sass {
305
305
  return hash_;
306
306
  }
307
307
 
308
- unsigned long Pseudo_Selector::specificity() const
308
+ unsigned long PseudoSelector::specificity() const
309
309
  {
310
310
  if (is_pseudo_element())
311
311
  return Constants::Specificity_Element;
312
312
  return Constants::Specificity_Pseudo;
313
313
  }
314
314
 
315
- Pseudo_Selector_Obj Pseudo_Selector::withSelector(SelectorListObj selector)
315
+ PseudoSelectorObj PseudoSelector::withSelector(SelectorListObj selector)
316
316
  {
317
- Pseudo_Selector_Obj pseudo = SASS_MEMORY_COPY(this);
317
+ PseudoSelectorObj pseudo = SASS_MEMORY_COPY(this);
318
318
  pseudo->selector(selector);
319
319
  return pseudo;
320
320
  }
321
321
 
322
- bool Pseudo_Selector::empty() const
322
+ bool PseudoSelector::empty() const
323
323
  {
324
324
  // Only considered empty if selector is
325
325
  // available but has no items in it.
326
326
  return selector() && selector()->empty();
327
327
  }
328
328
 
329
- void Pseudo_Selector::cloneChildren()
329
+ void PseudoSelector::cloneChildren()
330
330
  {
331
331
  if (selector().isNull()) selector({});
332
332
  else selector(SASS_MEMORY_CLONE(selector()));
333
333
  }
334
334
 
335
- bool Pseudo_Selector::has_real_parent_ref() const {
335
+ bool PseudoSelector::has_real_parent_ref() const {
336
336
  if (!selector()) return false;
337
337
  return selector()->has_real_parent_ref();
338
338
  }
@@ -340,7 +340,7 @@ namespace Sass {
340
340
  /////////////////////////////////////////////////////////////////////////
341
341
  /////////////////////////////////////////////////////////////////////////
342
342
 
343
- SelectorList::SelectorList(ParserState pstate, size_t s)
343
+ SelectorList::SelectorList(SourceSpan pstate, size_t s)
344
344
  : Selector(pstate),
345
345
  Vectorized<ComplexSelectorObj>(s),
346
346
  is_optional_(false)
@@ -391,7 +391,7 @@ namespace Sass {
391
391
  /////////////////////////////////////////////////////////////////////////
392
392
  /////////////////////////////////////////////////////////////////////////
393
393
 
394
- ComplexSelector::ComplexSelector(ParserState pstate)
394
+ ComplexSelector::ComplexSelector(SourceSpan pstate)
395
395
  : Selector(pstate),
396
396
  Vectorized<SelectorComponentObj>(),
397
397
  chroots_(false),
@@ -469,7 +469,7 @@ namespace Sass {
469
469
  /////////////////////////////////////////////////////////////////////////
470
470
  /////////////////////////////////////////////////////////////////////////
471
471
 
472
- SelectorComponent::SelectorComponent(ParserState pstate, bool postLineBreak)
472
+ SelectorComponent::SelectorComponent(SourceSpan pstate, bool postLineBreak)
473
473
  : Selector(pstate),
474
474
  hasPostLineBreak_(postLineBreak)
475
475
  {
@@ -500,7 +500,7 @@ namespace Sass {
500
500
  /////////////////////////////////////////////////////////////////////////
501
501
  /////////////////////////////////////////////////////////////////////////
502
502
 
503
- SelectorCombinator::SelectorCombinator(ParserState pstate, SelectorCombinator::Combinator combinator, bool postLineBreak)
503
+ SelectorCombinator::SelectorCombinator(SourceSpan pstate, SelectorCombinator::Combinator combinator, bool postLineBreak)
504
504
  : SelectorComponent(pstate, postLineBreak),
505
505
  combinator_(combinator)
506
506
  {
@@ -522,7 +522,7 @@ namespace Sass {
522
522
  /////////////////////////////////////////////////////////////////////////
523
523
  /////////////////////////////////////////////////////////////////////////
524
524
 
525
- CompoundSelector::CompoundSelector(ParserState pstate, bool postLineBreak)
525
+ CompoundSelector::CompoundSelector(SourceSpan pstate, bool postLineBreak)
526
526
  : SelectorComponent(pstate, postLineBreak),
527
527
  Vectorized<SimpleSelectorObj>(),
528
528
  hasRealParent_(false),
@@ -549,7 +549,7 @@ namespace Sass {
549
549
  {
550
550
  if (hasRealParent()) return true;
551
551
  // ToDo: dart sass has another check?
552
- // if (Cast<Type_Selector>(front)) {
552
+ // if (Cast<TypeSelector>(front)) {
553
553
  // if (front->ns() != "") return false;
554
554
  // }
555
555
  for (const SimpleSelector* s : elements()) {
@@ -590,7 +590,7 @@ namespace Sass {
590
590
  return true;
591
591
  }
592
592
 
593
- bool CompoundSelector::isSuperselectorOf(const CompoundSelector* sub, std::string wrapped) const
593
+ bool CompoundSelector::isSuperselectorOf(const CompoundSelector* sub, sass::string wrapped) const
594
594
  {
595
595
  CompoundSelector* rhs2 = const_cast<CompoundSelector*>(sub);
596
596
  CompoundSelector* lhs2 = const_cast<CompoundSelector*>(this);
@@ -600,15 +600,15 @@ namespace Sass {
600
600
  /////////////////////////////////////////////////////////////////////////
601
601
  /////////////////////////////////////////////////////////////////////////
602
602
 
603
- MediaRule::MediaRule(ParserState pstate, Block_Obj block) :
604
- Has_Block(pstate, block),
603
+ MediaRule::MediaRule(SourceSpan pstate, Block_Obj block) :
604
+ ParentStatement(pstate, block),
605
605
  schema_({})
606
606
  {
607
607
  statement_type(MEDIA);
608
608
  }
609
609
 
610
610
  MediaRule::MediaRule(const MediaRule* ptr) :
611
- Has_Block(ptr),
611
+ ParentStatement(ptr),
612
612
  schema_(ptr->schema_)
613
613
  {
614
614
  statement_type(MEDIA);
@@ -617,21 +617,21 @@ namespace Sass {
617
617
  /////////////////////////////////////////////////////////////////////////
618
618
  /////////////////////////////////////////////////////////////////////////
619
619
 
620
- CssMediaRule::CssMediaRule(ParserState pstate, Block_Obj block) :
621
- Has_Block(pstate, block),
620
+ CssMediaRule::CssMediaRule(SourceSpan pstate, Block_Obj block) :
621
+ ParentStatement(pstate, block),
622
622
  Vectorized()
623
623
  {
624
624
  statement_type(MEDIA);
625
625
  }
626
626
 
627
627
  CssMediaRule::CssMediaRule(const CssMediaRule* ptr) :
628
- Has_Block(ptr),
628
+ ParentStatement(ptr),
629
629
  Vectorized(*ptr)
630
630
  {
631
631
  statement_type(MEDIA);
632
632
  }
633
633
 
634
- CssMediaQuery::CssMediaQuery(ParserState pstate) :
634
+ CssMediaQuery::CssMediaQuery(SourceSpan pstate) :
635
635
  AST_Node(pstate),
636
636
  modifier_(""),
637
637
  type_(""),
@@ -653,26 +653,26 @@ namespace Sass {
653
653
  CssMediaQuery_Obj CssMediaQuery::merge(CssMediaQuery_Obj& other)
654
654
  {
655
655
 
656
- std::string ourType = this->type();
656
+ sass::string ourType = this->type();
657
657
  Util::ascii_str_tolower(&ourType);
658
658
 
659
- std::string theirType = other->type();
659
+ sass::string theirType = other->type();
660
660
  Util::ascii_str_tolower(&theirType);
661
661
 
662
- std::string ourModifier = this->modifier();
662
+ sass::string ourModifier = this->modifier();
663
663
  Util::ascii_str_tolower(&ourModifier);
664
664
 
665
- std::string theirModifier = other->modifier();
665
+ sass::string theirModifier = other->modifier();
666
666
  Util::ascii_str_tolower(&theirModifier);
667
667
 
668
- std::string type;
669
- std::string modifier;
670
- std::vector<std::string> features;
668
+ sass::string type;
669
+ sass::string modifier;
670
+ sass::vector<sass::string> features;
671
671
 
672
672
  if (ourType.empty() && theirType.empty()) {
673
673
  CssMediaQuery_Obj query = SASS_MEMORY_NEW(CssMediaQuery, pstate());
674
- std::vector<std::string> f1(this->features());
675
- std::vector<std::string> f2(other->features());
674
+ sass::vector<sass::string> f1(this->features());
675
+ sass::vector<sass::string> f2(other->features());
676
676
  features.insert(features.end(), f1.begin(), f1.end());
677
677
  features.insert(features.end(), f2.begin(), f2.end());
678
678
  query->features(features);
@@ -681,9 +681,9 @@ namespace Sass {
681
681
 
682
682
  if ((ourModifier == "not") != (theirModifier == "not")) {
683
683
  if (ourType == theirType) {
684
- std::vector<std::string> negativeFeatures =
684
+ sass::vector<sass::string> negativeFeatures =
685
685
  ourModifier == "not" ? this->features() : other->features();
686
- std::vector<std::string> positiveFeatures =
686
+ sass::vector<sass::string> positiveFeatures =
687
687
  ourModifier == "not" ? other->features() : this->features();
688
688
 
689
689
  // If the negative features are a subset of the positive features, the
@@ -747,16 +747,16 @@ namespace Sass {
747
747
  // Omit the type if either input query did, since that indicates that they
748
748
  // aren't targeting a browser that requires "all and".
749
749
  type = (other->matchesAllTypes() && ourType.empty()) ? "" : theirType;
750
- std::vector<std::string> f1(this->features());
751
- std::vector<std::string> f2(other->features());
750
+ sass::vector<sass::string> f1(this->features());
751
+ sass::vector<sass::string> f2(other->features());
752
752
  features.insert(features.end(), f1.begin(), f1.end());
753
753
  features.insert(features.end(), f2.begin(), f2.end());
754
754
  }
755
755
  else if (other->matchesAllTypes()) {
756
756
  modifier = ourModifier;
757
757
  type = ourType;
758
- std::vector<std::string> f1(this->features());
759
- std::vector<std::string> f2(other->features());
758
+ sass::vector<sass::string> f1(this->features());
759
+ sass::vector<sass::string> f2(other->features());
760
760
  features.insert(features.end(), f1.begin(), f1.end());
761
761
  features.insert(features.end(), f2.begin(), f2.end());
762
762
  }
@@ -766,8 +766,8 @@ namespace Sass {
766
766
  else {
767
767
  modifier = ourModifier.empty() ? theirModifier : ourModifier;
768
768
  type = ourType;
769
- std::vector<std::string> f1(this->features());
770
- std::vector<std::string> f2(other->features());
769
+ sass::vector<sass::string> f1(this->features());
770
+ sass::vector<sass::string> f2(other->features());
771
771
  features.insert(features.end(), f1.begin(), f1.end());
772
772
  features.insert(features.end(), f2.begin(), f2.end());
773
773
  }
@@ -850,15 +850,15 @@ namespace Sass {
850
850
  // ToDo: this might be done easier with new selector format
851
851
  /////////////////////////////////////////////////////////////////////////
852
852
 
853
- std::vector<ComplexSelectorObj>
853
+ sass::vector<ComplexSelectorObj>
854
854
  CompoundSelector::resolve_parent_refs(SelectorStack pstack, Backtraces& traces, bool implicit_parent)
855
855
  {
856
856
 
857
857
  auto parent = pstack.back();
858
- std::vector<ComplexSelectorObj> rv;
858
+ sass::vector<ComplexSelectorObj> rv;
859
859
 
860
860
  for (SimpleSelectorObj simple : elements()) {
861
- if (Pseudo_Selector * pseudo = Cast<Pseudo_Selector>(simple)) {
861
+ if (PseudoSelector * pseudo = Cast<PseudoSelector>(simple)) {
862
862
  if (SelectorList* sel = Cast<SelectorList>(pseudo->selector())) {
863
863
  if (parent) {
864
864
  pseudo->selector(sel->resolve_parent_refs(
@@ -887,7 +887,7 @@ namespace Sass {
887
887
  SimpleSelectorObj back = tail->last();
888
888
  SimpleSelectorObj front = first();
889
889
  auto simple_back = Cast<SimpleSelector>(back);
890
- auto simple_front = Cast<Type_Selector>(front);
890
+ auto simple_front = Cast<TypeSelector>(front);
891
891
  if (simple_front && simple_back) {
892
892
  simple_back = SASS_MEMORY_COPY(simple_back);
893
893
  auto name = simple_back->name();
@@ -940,11 +940,21 @@ namespace Sass {
940
940
 
941
941
  }
942
942
 
943
- /* better return std::vector? only - is empty container anyway? */
943
+ bool cmpSimpleSelectors(SimpleSelector* a, SimpleSelector* b)
944
+ {
945
+ return (a->getSortOrder() < b->getSortOrder());
946
+ }
947
+
948
+ void CompoundSelector::sortChildren()
949
+ {
950
+ std::sort(begin(), end(), cmpSimpleSelectors);
951
+ }
952
+
953
+ /* better return sass::vector? only - is empty container anyway? */
944
954
  SelectorList* ComplexSelector::resolve_parent_refs(SelectorStack pstack, Backtraces& traces, bool implicit_parent)
945
955
  {
946
956
 
947
- std::vector<std::vector<ComplexSelectorObj>> vars;
957
+ sass::vector<sass::vector<ComplexSelectorObj>> vars;
948
958
 
949
959
  auto parent = pstack.back();
950
960
 
@@ -977,7 +987,7 @@ namespace Sass {
977
987
  }
978
988
 
979
989
  // Need complex selectors to preserve linefeeds
980
- std::vector<std::vector<ComplexSelectorObj>> res = permutateAlt(vars);
990
+ sass::vector<sass::vector<ComplexSelectorObj>> res = permutateAlt(vars);
981
991
 
982
992
  // std::reverse(std::begin(res), std::end(res));
983
993
 
@@ -1019,12 +1029,12 @@ namespace Sass {
1019
1029
  /////////////////////////////////////////////////////////////////////////
1020
1030
 
1021
1031
  IMPLEMENT_AST_OPERATORS(Selector_Schema);
1022
- IMPLEMENT_AST_OPERATORS(Placeholder_Selector);
1023
- IMPLEMENT_AST_OPERATORS(Attribute_Selector);
1024
- IMPLEMENT_AST_OPERATORS(Type_Selector);
1025
- IMPLEMENT_AST_OPERATORS(Class_Selector);
1026
- IMPLEMENT_AST_OPERATORS(Id_Selector);
1027
- IMPLEMENT_AST_OPERATORS(Pseudo_Selector);
1032
+ IMPLEMENT_AST_OPERATORS(PlaceholderSelector);
1033
+ IMPLEMENT_AST_OPERATORS(AttributeSelector);
1034
+ IMPLEMENT_AST_OPERATORS(TypeSelector);
1035
+ IMPLEMENT_AST_OPERATORS(ClassSelector);
1036
+ IMPLEMENT_AST_OPERATORS(IDSelector);
1037
+ IMPLEMENT_AST_OPERATORS(PseudoSelector);
1028
1038
  IMPLEMENT_AST_OPERATORS(SelectorCombinator);
1029
1039
  IMPLEMENT_AST_OPERATORS(CompoundSelector);
1030
1040
  IMPLEMENT_AST_OPERATORS(ComplexSelector);