sassc4 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 (216) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +16 -0
  5. data/CHANGELOG.md +97 -0
  6. data/CODE_OF_CONDUCT.md +10 -0
  7. data/Gemfile +2 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +80 -0
  10. data/Rakefile +51 -0
  11. data/ext/depend +4 -0
  12. data/ext/extconf.rb +92 -0
  13. data/ext/libsass/VERSION +1 -0
  14. data/ext/libsass/contrib/plugin.cpp +60 -0
  15. data/ext/libsass/include/sass/base.h +97 -0
  16. data/ext/libsass/include/sass/context.h +174 -0
  17. data/ext/libsass/include/sass/functions.h +139 -0
  18. data/ext/libsass/include/sass/values.h +145 -0
  19. data/ext/libsass/include/sass/version.h +12 -0
  20. data/ext/libsass/include/sass.h +15 -0
  21. data/ext/libsass/include/sass2scss.h +120 -0
  22. data/ext/libsass/src/MurmurHash2.hpp +91 -0
  23. data/ext/libsass/src/ast.cpp +953 -0
  24. data/ext/libsass/src/ast.hpp +1064 -0
  25. data/ext/libsass/src/ast2c.cpp +80 -0
  26. data/ext/libsass/src/ast2c.hpp +39 -0
  27. data/ext/libsass/src/ast_def_macros.hpp +140 -0
  28. data/ext/libsass/src/ast_fwd_decl.cpp +31 -0
  29. data/ext/libsass/src/ast_fwd_decl.hpp +274 -0
  30. data/ext/libsass/src/ast_helpers.hpp +316 -0
  31. data/ext/libsass/src/ast_sel_cmp.cpp +396 -0
  32. data/ext/libsass/src/ast_sel_super.cpp +539 -0
  33. data/ext/libsass/src/ast_sel_unify.cpp +275 -0
  34. data/ext/libsass/src/ast_sel_weave.cpp +616 -0
  35. data/ext/libsass/src/ast_selectors.cpp +1070 -0
  36. data/ext/libsass/src/ast_selectors.hpp +523 -0
  37. data/ext/libsass/src/ast_supports.cpp +114 -0
  38. data/ext/libsass/src/ast_supports.hpp +121 -0
  39. data/ext/libsass/src/ast_values.cpp +1154 -0
  40. data/ext/libsass/src/ast_values.hpp +498 -0
  41. data/ext/libsass/src/b64/cencode.h +32 -0
  42. data/ext/libsass/src/b64/encode.h +79 -0
  43. data/ext/libsass/src/backtrace.cpp +50 -0
  44. data/ext/libsass/src/backtrace.hpp +29 -0
  45. data/ext/libsass/src/base64vlq.cpp +47 -0
  46. data/ext/libsass/src/base64vlq.hpp +30 -0
  47. data/ext/libsass/src/bind.cpp +312 -0
  48. data/ext/libsass/src/bind.hpp +15 -0
  49. data/ext/libsass/src/c2ast.cpp +64 -0
  50. data/ext/libsass/src/c2ast.hpp +14 -0
  51. data/ext/libsass/src/c99func.c +54 -0
  52. data/ext/libsass/src/cencode.c +106 -0
  53. data/ext/libsass/src/check_nesting.cpp +393 -0
  54. data/ext/libsass/src/check_nesting.hpp +70 -0
  55. data/ext/libsass/src/color_maps.cpp +652 -0
  56. data/ext/libsass/src/color_maps.hpp +323 -0
  57. data/ext/libsass/src/color_spaces.cpp +241 -0
  58. data/ext/libsass/src/color_spaces.hpp +227 -0
  59. data/ext/libsass/src/constants.cpp +199 -0
  60. data/ext/libsass/src/constants.hpp +200 -0
  61. data/ext/libsass/src/context.cpp +870 -0
  62. data/ext/libsass/src/context.hpp +140 -0
  63. data/ext/libsass/src/cssize.cpp +521 -0
  64. data/ext/libsass/src/cssize.hpp +71 -0
  65. data/ext/libsass/src/dart_helpers.hpp +199 -0
  66. data/ext/libsass/src/debug.hpp +43 -0
  67. data/ext/libsass/src/debugger.hpp +964 -0
  68. data/ext/libsass/src/emitter.cpp +297 -0
  69. data/ext/libsass/src/emitter.hpp +101 -0
  70. data/ext/libsass/src/environment.cpp +260 -0
  71. data/ext/libsass/src/environment.hpp +124 -0
  72. data/ext/libsass/src/error_handling.cpp +239 -0
  73. data/ext/libsass/src/error_handling.hpp +248 -0
  74. data/ext/libsass/src/eval.cpp +1543 -0
  75. data/ext/libsass/src/eval.hpp +110 -0
  76. data/ext/libsass/src/eval_selectors.cpp +75 -0
  77. data/ext/libsass/src/expand.cpp +875 -0
  78. data/ext/libsass/src/expand.hpp +98 -0
  79. data/ext/libsass/src/extender.cpp +1226 -0
  80. data/ext/libsass/src/extender.hpp +399 -0
  81. data/ext/libsass/src/extension.cpp +43 -0
  82. data/ext/libsass/src/extension.hpp +89 -0
  83. data/ext/libsass/src/file.cpp +531 -0
  84. data/ext/libsass/src/file.hpp +124 -0
  85. data/ext/libsass/src/fn_colors.cpp +836 -0
  86. data/ext/libsass/src/fn_colors.hpp +99 -0
  87. data/ext/libsass/src/fn_lists.cpp +285 -0
  88. data/ext/libsass/src/fn_lists.hpp +34 -0
  89. data/ext/libsass/src/fn_maps.cpp +94 -0
  90. data/ext/libsass/src/fn_maps.hpp +30 -0
  91. data/ext/libsass/src/fn_miscs.cpp +248 -0
  92. data/ext/libsass/src/fn_miscs.hpp +40 -0
  93. data/ext/libsass/src/fn_numbers.cpp +246 -0
  94. data/ext/libsass/src/fn_numbers.hpp +45 -0
  95. data/ext/libsass/src/fn_selectors.cpp +205 -0
  96. data/ext/libsass/src/fn_selectors.hpp +35 -0
  97. data/ext/libsass/src/fn_strings.cpp +268 -0
  98. data/ext/libsass/src/fn_strings.hpp +34 -0
  99. data/ext/libsass/src/fn_utils.cpp +159 -0
  100. data/ext/libsass/src/fn_utils.hpp +62 -0
  101. data/ext/libsass/src/inspect.cpp +1126 -0
  102. data/ext/libsass/src/inspect.hpp +101 -0
  103. data/ext/libsass/src/json.cpp +1436 -0
  104. data/ext/libsass/src/json.hpp +117 -0
  105. data/ext/libsass/src/kwd_arg_macros.hpp +28 -0
  106. data/ext/libsass/src/lexer.cpp +122 -0
  107. data/ext/libsass/src/lexer.hpp +304 -0
  108. data/ext/libsass/src/listize.cpp +70 -0
  109. data/ext/libsass/src/listize.hpp +37 -0
  110. data/ext/libsass/src/mapping.hpp +19 -0
  111. data/ext/libsass/src/memory/allocator.cpp +48 -0
  112. data/ext/libsass/src/memory/allocator.hpp +138 -0
  113. data/ext/libsass/src/memory/config.hpp +20 -0
  114. data/ext/libsass/src/memory/memory_pool.hpp +186 -0
  115. data/ext/libsass/src/memory/shared_ptr.cpp +33 -0
  116. data/ext/libsass/src/memory/shared_ptr.hpp +332 -0
  117. data/ext/libsass/src/memory.hpp +12 -0
  118. data/ext/libsass/src/operation.hpp +223 -0
  119. data/ext/libsass/src/operators.cpp +267 -0
  120. data/ext/libsass/src/operators.hpp +30 -0
  121. data/ext/libsass/src/ordered_map.hpp +112 -0
  122. data/ext/libsass/src/output.cpp +320 -0
  123. data/ext/libsass/src/output.hpp +47 -0
  124. data/ext/libsass/src/parser.cpp +3059 -0
  125. data/ext/libsass/src/parser.hpp +395 -0
  126. data/ext/libsass/src/parser_selectors.cpp +189 -0
  127. data/ext/libsass/src/permutate.hpp +164 -0
  128. data/ext/libsass/src/plugins.cpp +188 -0
  129. data/ext/libsass/src/plugins.hpp +57 -0
  130. data/ext/libsass/src/position.cpp +163 -0
  131. data/ext/libsass/src/position.hpp +147 -0
  132. data/ext/libsass/src/prelexer.cpp +1780 -0
  133. data/ext/libsass/src/prelexer.hpp +484 -0
  134. data/ext/libsass/src/remove_placeholders.cpp +86 -0
  135. data/ext/libsass/src/remove_placeholders.hpp +37 -0
  136. data/ext/libsass/src/sass.cpp +156 -0
  137. data/ext/libsass/src/sass.hpp +147 -0
  138. data/ext/libsass/src/sass2scss.cpp +895 -0
  139. data/ext/libsass/src/sass_context.cpp +742 -0
  140. data/ext/libsass/src/sass_context.hpp +129 -0
  141. data/ext/libsass/src/sass_functions.cpp +210 -0
  142. data/ext/libsass/src/sass_functions.hpp +50 -0
  143. data/ext/libsass/src/sass_values.cpp +362 -0
  144. data/ext/libsass/src/sass_values.hpp +82 -0
  145. data/ext/libsass/src/settings.hpp +19 -0
  146. data/ext/libsass/src/source.cpp +69 -0
  147. data/ext/libsass/src/source.hpp +95 -0
  148. data/ext/libsass/src/source_data.hpp +32 -0
  149. data/ext/libsass/src/source_map.cpp +202 -0
  150. data/ext/libsass/src/source_map.hpp +65 -0
  151. data/ext/libsass/src/stylesheet.cpp +22 -0
  152. data/ext/libsass/src/stylesheet.hpp +57 -0
  153. data/ext/libsass/src/to_value.cpp +114 -0
  154. data/ext/libsass/src/to_value.hpp +46 -0
  155. data/ext/libsass/src/units.cpp +507 -0
  156. data/ext/libsass/src/units.hpp +110 -0
  157. data/ext/libsass/src/utf8/checked.h +336 -0
  158. data/ext/libsass/src/utf8/core.h +332 -0
  159. data/ext/libsass/src/utf8/unchecked.h +235 -0
  160. data/ext/libsass/src/utf8.h +34 -0
  161. data/ext/libsass/src/utf8_string.cpp +104 -0
  162. data/ext/libsass/src/utf8_string.hpp +38 -0
  163. data/ext/libsass/src/util.cpp +723 -0
  164. data/ext/libsass/src/util.hpp +105 -0
  165. data/ext/libsass/src/util_string.cpp +125 -0
  166. data/ext/libsass/src/util_string.hpp +73 -0
  167. data/ext/libsass/src/values.cpp +140 -0
  168. data/ext/libsass/src/values.hpp +12 -0
  169. data/lib/sassc/dependency.rb +17 -0
  170. data/lib/sassc/engine.rb +141 -0
  171. data/lib/sassc/error.rb +37 -0
  172. data/lib/sassc/functions_handler.rb +73 -0
  173. data/lib/sassc/import_handler.rb +50 -0
  174. data/lib/sassc/importer.rb +31 -0
  175. data/lib/sassc/native/native_context_api.rb +147 -0
  176. data/lib/sassc/native/native_functions_api.rb +159 -0
  177. data/lib/sassc/native/sass2scss_api.rb +10 -0
  178. data/lib/sassc/native/sass_input_style.rb +13 -0
  179. data/lib/sassc/native/sass_output_style.rb +12 -0
  180. data/lib/sassc/native/sass_value.rb +97 -0
  181. data/lib/sassc/native/string_list.rb +10 -0
  182. data/lib/sassc/native.rb +64 -0
  183. data/lib/sassc/sass_2_scss.rb +9 -0
  184. data/lib/sassc/script/functions.rb +8 -0
  185. data/lib/sassc/script/value/bool.rb +32 -0
  186. data/lib/sassc/script/value/color.rb +95 -0
  187. data/lib/sassc/script/value/list.rb +136 -0
  188. data/lib/sassc/script/value/map.rb +69 -0
  189. data/lib/sassc/script/value/number.rb +389 -0
  190. data/lib/sassc/script/value/string.rb +96 -0
  191. data/lib/sassc/script/value.rb +137 -0
  192. data/lib/sassc/script/value_conversion/base.rb +13 -0
  193. data/lib/sassc/script/value_conversion/bool.rb +13 -0
  194. data/lib/sassc/script/value_conversion/color.rb +18 -0
  195. data/lib/sassc/script/value_conversion/list.rb +25 -0
  196. data/lib/sassc/script/value_conversion/map.rb +21 -0
  197. data/lib/sassc/script/value_conversion/number.rb +13 -0
  198. data/lib/sassc/script/value_conversion/string.rb +17 -0
  199. data/lib/sassc/script/value_conversion.rb +69 -0
  200. data/lib/sassc/script.rb +17 -0
  201. data/lib/sassc/util/normalized_map.rb +117 -0
  202. data/lib/sassc/util.rb +231 -0
  203. data/lib/sassc/version.rb +5 -0
  204. data/lib/sassc.rb +57 -0
  205. data/sassc.gemspec +69 -0
  206. data/test/css_color_level4_test.rb +168 -0
  207. data/test/custom_importer_test.rb +127 -0
  208. data/test/engine_test.rb +314 -0
  209. data/test/error_test.rb +29 -0
  210. data/test/fixtures/paths.scss +10 -0
  211. data/test/functions_test.rb +340 -0
  212. data/test/native_test.rb +213 -0
  213. data/test/output_style_test.rb +107 -0
  214. data/test/sass_2_scss_test.rb +14 -0
  215. data/test/test_helper.rb +45 -0
  216. metadata +396 -0
@@ -0,0 +1,275 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
3
+ #include "sass.hpp"
4
+
5
+ #include "ast.hpp"
6
+
7
+ namespace Sass {
8
+
9
+ // ##########################################################################
10
+ // Returns the contents of a [SelectorList] that matches only
11
+ // elements that are matched by both [complex1] and [complex2].
12
+ // If no such list can be produced, returns `null`.
13
+ // ##########################################################################
14
+ // ToDo: fine-tune API to avoid unnecessary wrapper allocations
15
+ // ##########################################################################
16
+ sass::vector<sass::vector<SelectorComponentObj>> unifyComplex(
17
+ const sass::vector<sass::vector<SelectorComponentObj>>& complexes)
18
+ {
19
+
20
+ SASS_ASSERT(!complexes.empty(), "Can't unify empty list");
21
+ if (complexes.size() == 1) return complexes;
22
+
23
+ CompoundSelectorObj unifiedBase = SASS_MEMORY_NEW(CompoundSelector, SourceSpan("[unify]"));
24
+ for (auto complex : complexes) {
25
+ SelectorComponentObj base = complex.back();
26
+ if (CompoundSelector * comp = base->getCompound()) {
27
+ if (unifiedBase->empty()) {
28
+ unifiedBase->concat(comp);
29
+ }
30
+ else {
31
+ for (SimpleSelectorObj simple : comp->elements()) {
32
+ unifiedBase = simple->unifyWith(unifiedBase);
33
+ if (unifiedBase.isNull()) return {};
34
+ }
35
+ }
36
+ }
37
+ else {
38
+ return {};
39
+ }
40
+ }
41
+
42
+ sass::vector<sass::vector<SelectorComponentObj>> complexesWithoutBases;
43
+ for (size_t i = 0; i < complexes.size(); i += 1) {
44
+ sass::vector<SelectorComponentObj> sel = complexes[i];
45
+ sel.pop_back(); // remove last item (base) from the list
46
+ complexesWithoutBases.push_back(std::move(sel));
47
+ }
48
+
49
+ complexesWithoutBases.back().push_back(unifiedBase);
50
+
51
+ return weave(complexesWithoutBases);
52
+
53
+ }
54
+ // EO unifyComplex
55
+
56
+ // ##########################################################################
57
+ // Returns a [CompoundSelector] that matches only elements
58
+ // that are matched by both [compound1] and [compound2].
59
+ // If no such selector can be produced, returns `null`.
60
+ // ##########################################################################
61
+ CompoundSelector* CompoundSelector::unifyWith(CompoundSelector* rhs)
62
+ {
63
+ if (empty()) return rhs;
64
+ CompoundSelectorObj unified = SASS_MEMORY_COPY(rhs);
65
+ for (const SimpleSelectorObj& sel : elements()) {
66
+ unified = sel->unifyWith(unified);
67
+ if (unified.isNull()) break;
68
+ }
69
+ return unified.detach();
70
+ }
71
+ // EO CompoundSelector::unifyWith(CompoundSelector*)
72
+
73
+ // ##########################################################################
74
+ // Returns the compoments of a [CompoundSelector] that matches only elements
75
+ // matched by both this and [compound]. By default, this just returns a copy
76
+ // of [compound] with this selector added to the end, or returns the original
77
+ // array if this selector already exists in it. Returns `null` if unification
78
+ // is impossible—for example, if there are multiple ID selectors.
79
+ // ##########################################################################
80
+ // This is implemented in `selector/simple.dart` as `SimpleSelector::unify`
81
+ // ##########################################################################
82
+ CompoundSelector* SimpleSelector::unifyWith(CompoundSelector* rhs)
83
+ {
84
+
85
+ if (rhs->length() == 1) {
86
+ if (rhs->get(0)->is_universal()) {
87
+ CompoundSelector* this_compound = SASS_MEMORY_NEW(CompoundSelector, pstate());
88
+ this_compound->append(SASS_MEMORY_COPY(this));
89
+ CompoundSelector* unified = rhs->get(0)->unifyWith(this_compound);
90
+ if (unified == nullptr || unified != this_compound) delete this_compound;
91
+ return unified;
92
+ }
93
+ }
94
+ for (const SimpleSelectorObj& sel : rhs->elements()) {
95
+ if (*this == *sel) {
96
+ return rhs;
97
+ }
98
+ }
99
+
100
+ CompoundSelectorObj result = SASS_MEMORY_NEW(CompoundSelector, rhs->pstate());
101
+
102
+ bool addedThis = false;
103
+ for (auto simple : rhs->elements()) {
104
+ // Make sure pseudo selectors always come last.
105
+ if (!addedThis && simple->getPseudoSelector()) {
106
+ result->append(this);
107
+ addedThis = true;
108
+ }
109
+ result->append(simple);
110
+ }
111
+
112
+ if (!addedThis) {
113
+ result->append(this);
114
+ }
115
+ return result.detach();
116
+
117
+ }
118
+ // EO SimpleSelector::unifyWith(CompoundSelector*)
119
+
120
+ // ##########################################################################
121
+ // This is implemented in `selector/type.dart` as `PseudoSelector::unify`
122
+ // ##########################################################################
123
+ CompoundSelector* TypeSelector::unifyWith(CompoundSelector* rhs)
124
+ {
125
+ if (rhs->empty()) {
126
+ rhs->append(this);
127
+ return rhs;
128
+ }
129
+ TypeSelector* type = Cast<TypeSelector>(rhs->at(0));
130
+ if (type != nullptr) {
131
+ SimpleSelector* unified = unifyWith(type);
132
+ if (unified == nullptr) {
133
+ return nullptr;
134
+ }
135
+ rhs->elements()[0] = unified;
136
+ }
137
+ else if (!is_universal() || (has_ns_ && ns_ != "*")) {
138
+ rhs->insert(rhs->begin(), this);
139
+ }
140
+ return rhs;
141
+ }
142
+
143
+ // ##########################################################################
144
+ // This is implemented in `selector/id.dart` as `PseudoSelector::unify`
145
+ // ##########################################################################
146
+ CompoundSelector* IDSelector::unifyWith(CompoundSelector* rhs)
147
+ {
148
+ for (const SimpleSelector* sel : rhs->elements()) {
149
+ if (const IDSelector* id_sel = Cast<IDSelector>(sel)) {
150
+ if (id_sel->name() != name()) return nullptr;
151
+ }
152
+ }
153
+ return SimpleSelector::unifyWith(rhs);
154
+ }
155
+
156
+ // ##########################################################################
157
+ // This is implemented in `selector/pseudo.dart` as `PseudoSelector::unify`
158
+ // ##########################################################################
159
+ CompoundSelector* PseudoSelector::unifyWith(CompoundSelector* compound)
160
+ {
161
+
162
+ if (compound->length() == 1 && compound->first()->is_universal()) {
163
+ // std::cerr << "implement universal pseudo\n";
164
+ }
165
+
166
+ for (const SimpleSelectorObj& sel : compound->elements()) {
167
+ if (*this == *sel) {
168
+ return compound;
169
+ }
170
+ }
171
+
172
+ CompoundSelectorObj result = SASS_MEMORY_NEW(CompoundSelector, compound->pstate());
173
+
174
+ bool addedThis = false;
175
+ for (auto simple : compound->elements()) {
176
+ // Make sure pseudo selectors always come last.
177
+ if (PseudoSelectorObj pseudo = simple->getPseudoSelector()) {
178
+ if (pseudo->isElement()) {
179
+ // A given compound selector may only contain one pseudo element. If
180
+ // [compound] has a different one than [this], unification fails.
181
+ if (isElement()) {
182
+ return {};
183
+ }
184
+ // Otherwise, this is a pseudo selector and
185
+ // should come before pseduo elements.
186
+ result->append(this);
187
+ addedThis = true;
188
+ }
189
+ }
190
+ result->append(simple);
191
+ }
192
+
193
+ if (!addedThis) {
194
+ result->append(this);
195
+ }
196
+
197
+ return result.detach();
198
+
199
+ }
200
+ // EO PseudoSelector::unifyWith(CompoundSelector*
201
+
202
+ // ##########################################################################
203
+ // This is implemented in `extend/functions.dart` as `unifyUniversalAndElement`
204
+ // Returns a [SimpleSelector] that matches only elements that are matched by
205
+ // both [selector1] and [selector2], which must both be either [UniversalSelector]s
206
+ // or [TypeSelector]s. If no such selector can be produced, returns `null`.
207
+ // Note: libsass handles universal selector directly within the type selector
208
+ // ##########################################################################
209
+ SimpleSelector* TypeSelector::unifyWith(const SimpleSelector* rhs)
210
+ {
211
+ bool rhs_ns = false;
212
+ if (!(is_ns_eq(*rhs) || rhs->is_universal_ns())) {
213
+ if (!is_universal_ns()) {
214
+ return nullptr;
215
+ }
216
+ rhs_ns = true;
217
+ }
218
+ bool rhs_name = false;
219
+ if (!(name_ == rhs->name() || rhs->is_universal())) {
220
+ if (!(is_universal())) {
221
+ return nullptr;
222
+ }
223
+ rhs_name = true;
224
+ }
225
+ if (rhs_ns) {
226
+ ns(rhs->ns());
227
+ has_ns(rhs->has_ns());
228
+ }
229
+ if (rhs_name) name(rhs->name());
230
+ return this;
231
+ }
232
+ // EO TypeSelector::unifyWith(const SimpleSelector*)
233
+
234
+ // ##########################################################################
235
+ // Unify two complex selectors. Internally calls `unifyComplex`
236
+ // and then wraps the result in newly create ComplexSelectors.
237
+ // ##########################################################################
238
+ SelectorList* ComplexSelector::unifyWith(ComplexSelector* rhs)
239
+ {
240
+ SelectorListObj list = SASS_MEMORY_NEW(SelectorList, pstate());
241
+ sass::vector<sass::vector<SelectorComponentObj>> rv =
242
+ unifyComplex({ elements(), rhs->elements() });
243
+ for (sass::vector<SelectorComponentObj> items : rv) {
244
+ ComplexSelectorObj sel = SASS_MEMORY_NEW(ComplexSelector, pstate());
245
+ sel->elements() = std::move(items);
246
+ list->append(sel);
247
+ }
248
+ return list.detach();
249
+ }
250
+ // EO ComplexSelector::unifyWith(ComplexSelector*)
251
+
252
+ // ##########################################################################
253
+ // only called from the sass function `selector-unify`
254
+ // ##########################################################################
255
+ SelectorList* SelectorList::unifyWith(SelectorList* rhs)
256
+ {
257
+ SelectorList* slist = SASS_MEMORY_NEW(SelectorList, pstate());
258
+ // Unify all of children with RHS's children,
259
+ // storing the results in `unified_complex_selectors`
260
+ for (ComplexSelectorObj& seq1 : elements()) {
261
+ for (ComplexSelectorObj& seq2 : rhs->elements()) {
262
+ if (SelectorListObj unified = seq1->unifyWith(seq2)) {
263
+ std::move(unified->begin(), unified->end(),
264
+ std::inserter(slist->elements(), slist->end()));
265
+ }
266
+ }
267
+ }
268
+ return slist;
269
+ }
270
+ // EO SelectorList::unifyWith(SelectorList*)
271
+
272
+ // ##########################################################################
273
+ // ##########################################################################
274
+
275
+ }