sassc 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
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);