sassc 2.2.1 → 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 (147) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/CHANGELOG.md +18 -0
  4. data/Rakefile +1 -3
  5. data/ext/extconf.rb +13 -5
  6. data/ext/libsass/VERSION +1 -1
  7. data/ext/libsass/include/sass/base.h +2 -1
  8. data/ext/libsass/include/sass/context.h +4 -0
  9. data/ext/libsass/src/MurmurHash2.hpp +91 -0
  10. data/ext/libsass/src/ast.cpp +158 -168
  11. data/ext/libsass/src/ast.hpp +389 -230
  12. data/ext/libsass/src/ast_def_macros.hpp +18 -10
  13. data/ext/libsass/src/ast_fwd_decl.cpp +4 -3
  14. data/ext/libsass/src/ast_fwd_decl.hpp +98 -165
  15. data/ext/libsass/src/ast_helpers.hpp +292 -0
  16. data/ext/libsass/src/ast_sel_cmp.cpp +219 -732
  17. data/ext/libsass/src/ast_sel_super.cpp +539 -0
  18. data/ext/libsass/src/ast_sel_unify.cpp +207 -212
  19. data/ext/libsass/src/ast_sel_weave.cpp +616 -0
  20. data/ext/libsass/src/ast_selectors.cpp +594 -1026
  21. data/ext/libsass/src/ast_selectors.hpp +339 -385
  22. data/ext/libsass/src/ast_supports.cpp +36 -52
  23. data/ext/libsass/src/ast_supports.hpp +29 -29
  24. data/ext/libsass/src/ast_values.cpp +271 -84
  25. data/ext/libsass/src/ast_values.hpp +116 -107
  26. data/ext/libsass/src/backtrace.cpp +9 -9
  27. data/ext/libsass/src/backtrace.hpp +5 -5
  28. data/ext/libsass/src/base64vlq.cpp +2 -2
  29. data/ext/libsass/src/base64vlq.hpp +1 -1
  30. data/ext/libsass/src/bind.cpp +18 -18
  31. data/ext/libsass/src/bind.hpp +1 -1
  32. data/ext/libsass/src/c2ast.cpp +3 -3
  33. data/ext/libsass/src/c2ast.hpp +1 -1
  34. data/ext/libsass/src/cencode.c +4 -6
  35. data/ext/libsass/src/check_nesting.cpp +40 -41
  36. data/ext/libsass/src/check_nesting.hpp +6 -2
  37. data/ext/libsass/src/color_maps.cpp +14 -13
  38. data/ext/libsass/src/color_maps.hpp +1 -9
  39. data/ext/libsass/src/constants.cpp +5 -0
  40. data/ext/libsass/src/constants.hpp +6 -0
  41. data/ext/libsass/src/context.cpp +92 -119
  42. data/ext/libsass/src/context.hpp +41 -53
  43. data/ext/libsass/src/cssize.cpp +66 -149
  44. data/ext/libsass/src/cssize.hpp +17 -23
  45. data/ext/libsass/src/dart_helpers.hpp +199 -0
  46. data/ext/libsass/src/debugger.hpp +451 -295
  47. data/ext/libsass/src/emitter.cpp +15 -16
  48. data/ext/libsass/src/emitter.hpp +10 -12
  49. data/ext/libsass/src/environment.cpp +27 -27
  50. data/ext/libsass/src/environment.hpp +29 -24
  51. data/ext/libsass/src/error_handling.cpp +62 -41
  52. data/ext/libsass/src/error_handling.hpp +61 -51
  53. data/ext/libsass/src/eval.cpp +167 -281
  54. data/ext/libsass/src/eval.hpp +27 -29
  55. data/ext/libsass/src/eval_selectors.cpp +75 -0
  56. data/ext/libsass/src/expand.cpp +275 -222
  57. data/ext/libsass/src/expand.hpp +36 -16
  58. data/ext/libsass/src/extender.cpp +1188 -0
  59. data/ext/libsass/src/extender.hpp +399 -0
  60. data/ext/libsass/src/extension.cpp +43 -0
  61. data/ext/libsass/src/extension.hpp +89 -0
  62. data/ext/libsass/src/file.cpp +81 -72
  63. data/ext/libsass/src/file.hpp +28 -37
  64. data/ext/libsass/src/fn_colors.cpp +20 -18
  65. data/ext/libsass/src/fn_lists.cpp +30 -29
  66. data/ext/libsass/src/fn_maps.cpp +3 -3
  67. data/ext/libsass/src/fn_miscs.cpp +34 -46
  68. data/ext/libsass/src/fn_numbers.cpp +20 -13
  69. data/ext/libsass/src/fn_selectors.cpp +98 -128
  70. data/ext/libsass/src/fn_strings.cpp +47 -33
  71. data/ext/libsass/src/fn_utils.cpp +31 -29
  72. data/ext/libsass/src/fn_utils.hpp +17 -11
  73. data/ext/libsass/src/inspect.cpp +186 -148
  74. data/ext/libsass/src/inspect.hpp +31 -29
  75. data/ext/libsass/src/lexer.cpp +20 -82
  76. data/ext/libsass/src/lexer.hpp +5 -16
  77. data/ext/libsass/src/listize.cpp +23 -37
  78. data/ext/libsass/src/listize.hpp +8 -9
  79. data/ext/libsass/src/mapping.hpp +1 -0
  80. data/ext/libsass/src/memory/allocator.cpp +48 -0
  81. data/ext/libsass/src/memory/allocator.hpp +138 -0
  82. data/ext/libsass/src/memory/config.hpp +20 -0
  83. data/ext/libsass/src/memory/memory_pool.hpp +186 -0
  84. data/ext/libsass/src/memory/{SharedPtr.cpp → shared_ptr.cpp} +2 -2
  85. data/ext/libsass/src/memory/{SharedPtr.hpp → shared_ptr.hpp} +55 -9
  86. data/ext/libsass/src/memory.hpp +12 -0
  87. data/ext/libsass/src/operation.hpp +71 -61
  88. data/ext/libsass/src/operators.cpp +19 -18
  89. data/ext/libsass/src/operators.hpp +11 -11
  90. data/ext/libsass/src/ordered_map.hpp +112 -0
  91. data/ext/libsass/src/output.cpp +45 -64
  92. data/ext/libsass/src/output.hpp +6 -6
  93. data/ext/libsass/src/parser.cpp +512 -700
  94. data/ext/libsass/src/parser.hpp +89 -97
  95. data/ext/libsass/src/parser_selectors.cpp +189 -0
  96. data/ext/libsass/src/permutate.hpp +164 -0
  97. data/ext/libsass/src/plugins.cpp +7 -7
  98. data/ext/libsass/src/plugins.hpp +8 -8
  99. data/ext/libsass/src/position.cpp +7 -26
  100. data/ext/libsass/src/position.hpp +44 -21
  101. data/ext/libsass/src/prelexer.cpp +6 -6
  102. data/ext/libsass/src/remove_placeholders.cpp +55 -56
  103. data/ext/libsass/src/remove_placeholders.hpp +21 -18
  104. data/ext/libsass/src/sass.cpp +16 -15
  105. data/ext/libsass/src/sass.hpp +10 -5
  106. data/ext/libsass/src/sass2scss.cpp +4 -4
  107. data/ext/libsass/src/sass_context.cpp +91 -122
  108. data/ext/libsass/src/sass_context.hpp +2 -2
  109. data/ext/libsass/src/sass_functions.cpp +1 -1
  110. data/ext/libsass/src/sass_values.cpp +8 -11
  111. data/ext/libsass/src/settings.hpp +19 -0
  112. data/ext/libsass/src/source.cpp +69 -0
  113. data/ext/libsass/src/source.hpp +95 -0
  114. data/ext/libsass/src/source_data.hpp +32 -0
  115. data/ext/libsass/src/source_map.cpp +22 -18
  116. data/ext/libsass/src/source_map.hpp +12 -9
  117. data/ext/libsass/src/stylesheet.cpp +22 -0
  118. data/ext/libsass/src/stylesheet.hpp +57 -0
  119. data/ext/libsass/src/to_value.cpp +2 -2
  120. data/ext/libsass/src/to_value.hpp +1 -1
  121. data/ext/libsass/src/units.cpp +24 -22
  122. data/ext/libsass/src/units.hpp +8 -8
  123. data/ext/libsass/src/utf8_string.cpp +9 -10
  124. data/ext/libsass/src/utf8_string.hpp +7 -6
  125. data/ext/libsass/src/util.cpp +48 -50
  126. data/ext/libsass/src/util.hpp +20 -21
  127. data/ext/libsass/src/util_string.cpp +111 -61
  128. data/ext/libsass/src/util_string.hpp +62 -8
  129. data/ext/libsass/src/values.cpp +12 -12
  130. data/lib/sassc/engine.rb +5 -3
  131. data/lib/sassc/functions_handler.rb +8 -8
  132. data/lib/sassc/native.rb +4 -6
  133. data/lib/sassc/script.rb +4 -4
  134. data/lib/sassc/version.rb +1 -1
  135. data/test/functions_test.rb +18 -1
  136. data/test/native_test.rb +4 -4
  137. metadata +29 -15
  138. data/ext/libsass/src/extend.cpp +0 -2132
  139. data/ext/libsass/src/extend.hpp +0 -86
  140. data/ext/libsass/src/node.cpp +0 -322
  141. data/ext/libsass/src/node.hpp +0 -118
  142. data/ext/libsass/src/paths.hpp +0 -71
  143. data/ext/libsass/src/sass_util.cpp +0 -152
  144. data/ext/libsass/src/sass_util.hpp +0 -256
  145. data/ext/libsass/src/subset_map.cpp +0 -58
  146. data/ext/libsass/src/subset_map.hpp +0 -76
  147. data/lib/sassc/native/lib_c.rb +0 -21
@@ -1,23 +1,12 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
1
3
  #include "sass.hpp"
4
+
2
5
  #include "ast.hpp"
3
- #include "context.hpp"
4
- #include "node.hpp"
5
- #include "eval.hpp"
6
- #include "extend.hpp"
7
- #include "emitter.hpp"
8
- #include "color_maps.hpp"
9
- #include "ast_fwd_decl.hpp"
10
- #include <set>
11
- #include <iomanip>
12
- #include <iostream>
13
- #include <algorithm>
14
- #include <functional>
15
- #include <cctype>
16
- #include <locale>
17
6
 
18
7
  namespace Sass {
19
8
 
20
- static Null sass_null(ParserState("null"));
9
+ static Null sass_null(SourceSpan("null"));
21
10
 
22
11
  const char* sass_op_to_name(enum Sass_OP op) {
23
12
  switch (op) {
@@ -64,12 +53,12 @@ namespace Sass {
64
53
  /////////////////////////////////////////////////////////////////////////
65
54
  /////////////////////////////////////////////////////////////////////////
66
55
 
67
- void AST_Node::update_pstate(const ParserState& pstate)
56
+ void AST_Node::update_pstate(const SourceSpan& pstate)
68
57
  {
69
- pstate_.offset += pstate - pstate_ + pstate.offset;
58
+ pstate_.offset += pstate.position - pstate_.position + pstate.offset;
70
59
  }
71
60
 
72
- const std::string AST_Node::to_string(Sass_Inspect_Options opt) const
61
+ sass::string AST_Node::to_string(Sass_Inspect_Options opt) const
73
62
  {
74
63
  Sass_Output_Options out(opt);
75
64
  Emitter emitter(out);
@@ -80,25 +69,27 @@ namespace Sass {
80
69
  return i.get_buffer();
81
70
  }
82
71
 
83
- const std::string AST_Node::to_string() const
72
+ sass::string AST_Node::to_css(Sass_Inspect_Options opt) const
84
73
  {
85
- return to_string({ NESTED, 5 });
74
+ opt.output_style = TO_CSS;
75
+ Sass_Output_Options out(opt);
76
+ Emitter emitter(out);
77
+ Inspect i(emitter);
78
+ i.in_declaration = true;
79
+ // ToDo: inspect should be const
80
+ const_cast<AST_Node*>(this)->perform(&i);
81
+ return i.get_buffer();
86
82
  }
87
83
 
88
- /////////////////////////////////////////////////////////////////////////
89
- /////////////////////////////////////////////////////////////////////////
90
-
91
- Expression_Obj Hashed::at(Expression_Obj k) const
84
+ sass::string AST_Node::to_string() const
92
85
  {
93
- if (elements_.count(k))
94
- { return elements_.at(k); }
95
- else { return {}; }
86
+ return to_string({ NESTED, 5 });
96
87
  }
97
88
 
98
89
  /////////////////////////////////////////////////////////////////////////
99
90
  /////////////////////////////////////////////////////////////////////////
100
91
 
101
- Statement::Statement(ParserState pstate, Type st, size_t t)
92
+ Statement::Statement(SourceSpan pstate, Type st, size_t t)
102
93
  : AST_Node(pstate), statement_type_(st), tabs_(t), group_end_(false)
103
94
  { }
104
95
  Statement::Statement(const Statement* ptr)
@@ -126,7 +117,7 @@ namespace Sass {
126
117
  /////////////////////////////////////////////////////////////////////////
127
118
  /////////////////////////////////////////////////////////////////////////
128
119
 
129
- Block::Block(ParserState pstate, size_t s, bool r)
120
+ Block::Block(SourceSpan pstate, size_t s, bool r)
130
121
  : Statement(pstate),
131
122
  Vectorized<Statement_Obj>(s),
132
123
  is_root_(r)
@@ -137,6 +128,14 @@ namespace Sass {
137
128
  is_root_(ptr->is_root_)
138
129
  { }
139
130
 
131
+ bool Block::isInvisible() const
132
+ {
133
+ for (auto& item : elements()) {
134
+ if (!item->is_invisible()) return false;
135
+ }
136
+ return true;
137
+ }
138
+
140
139
  bool Block::has_content()
141
140
  {
142
141
  for (size_t i = 0, L = elements().size(); i < L; ++i) {
@@ -148,14 +147,14 @@ namespace Sass {
148
147
  /////////////////////////////////////////////////////////////////////////
149
148
  /////////////////////////////////////////////////////////////////////////
150
149
 
151
- Has_Block::Has_Block(ParserState pstate, Block_Obj b)
150
+ ParentStatement::ParentStatement(SourceSpan pstate, Block_Obj b)
152
151
  : Statement(pstate), block_(b)
153
152
  { }
154
- Has_Block::Has_Block(const Has_Block* ptr)
153
+ ParentStatement::ParentStatement(const ParentStatement* ptr)
155
154
  : Statement(ptr), block_(ptr->block_)
156
155
  { }
157
156
 
158
- bool Has_Block::has_content()
157
+ bool ParentStatement::has_content()
159
158
  {
160
159
  return (block_ && block_->has_content()) || Statement::has_content();
161
160
  }
@@ -163,19 +162,20 @@ namespace Sass {
163
162
  /////////////////////////////////////////////////////////////////////////
164
163
  /////////////////////////////////////////////////////////////////////////
165
164
 
166
- Ruleset::Ruleset(ParserState pstate, Selector_List_Obj s, Block_Obj b)
167
- : Has_Block(pstate, b), selector_(s), is_root_(false)
165
+ StyleRule::StyleRule(SourceSpan pstate, SelectorListObj s, Block_Obj b)
166
+ : ParentStatement(pstate, b), selector_(s), schema_(), is_root_(false)
168
167
  { statement_type(RULESET); }
169
- Ruleset::Ruleset(const Ruleset* ptr)
170
- : Has_Block(ptr),
168
+ StyleRule::StyleRule(const StyleRule* ptr)
169
+ : ParentStatement(ptr),
171
170
  selector_(ptr->selector_),
171
+ schema_(ptr->schema_),
172
172
  is_root_(ptr->is_root_)
173
173
  { statement_type(RULESET); }
174
174
 
175
- bool Ruleset::is_invisible() const {
176
- if (Selector_List* sl = Cast<Selector_List>(selector())) {
177
- for (size_t i = 0, L = sl->length(); i < L; ++i)
178
- if (!(*sl)[i]->has_placeholder()) return false;
175
+ bool StyleRule::is_invisible() const {
176
+ if (const SelectorList * sl = Cast<SelectorList>(selector())) {
177
+ for (size_t i = 0, L = sl->length(); i < L; i += 1)
178
+ if (!(*sl)[i]->isInvisible()) return false;
179
179
  }
180
180
  return true;
181
181
  }
@@ -183,7 +183,7 @@ namespace Sass {
183
183
  /////////////////////////////////////////////////////////////////////////
184
184
  /////////////////////////////////////////////////////////////////////////
185
185
 
186
- Bubble::Bubble(ParserState pstate, Statement_Obj n, Statement_Obj g, size_t t)
186
+ Bubble::Bubble(SourceSpan pstate, Statement_Obj n, Statement_Obj g, size_t t)
187
187
  : Statement(pstate, Statement::BUBBLE, t), node_(n), group_end_(g == nullptr)
188
188
  { }
189
189
  Bubble::Bubble(const Bubble* ptr)
@@ -200,11 +200,11 @@ namespace Sass {
200
200
  /////////////////////////////////////////////////////////////////////////
201
201
  /////////////////////////////////////////////////////////////////////////
202
202
 
203
- Trace::Trace(ParserState pstate, std::string n, Block_Obj b, char type)
204
- : Has_Block(pstate, b), type_(type), name_(n)
203
+ Trace::Trace(SourceSpan pstate, sass::string n, Block_Obj b, char type)
204
+ : ParentStatement(pstate, b), type_(type), name_(n)
205
205
  { }
206
206
  Trace::Trace(const Trace* ptr)
207
- : Has_Block(ptr),
207
+ : ParentStatement(ptr),
208
208
  type_(ptr->type_),
209
209
  name_(ptr->name_)
210
210
  { }
@@ -212,48 +212,25 @@ namespace Sass {
212
212
  /////////////////////////////////////////////////////////////////////////
213
213
  /////////////////////////////////////////////////////////////////////////
214
214
 
215
- Media_Block::Media_Block(ParserState pstate, List_Obj mqs, Block_Obj b)
216
- : Has_Block(pstate, b), media_queries_(mqs)
217
- { statement_type(MEDIA); }
218
- Media_Block::Media_Block(const Media_Block* ptr)
219
- : Has_Block(ptr), media_queries_(ptr->media_queries_)
220
- { statement_type(MEDIA); }
221
-
222
- bool Media_Block::is_invisible() const {
223
- for (size_t i = 0, L = block()->length(); i < L; ++i) {
224
- Statement_Obj stm = block()->at(i);
225
- if (!stm->is_invisible()) return false;
226
- }
227
- return true;
228
- }
229
-
230
- bool Media_Block::bubbles()
231
- {
232
- return true;
233
- }
234
-
235
- /////////////////////////////////////////////////////////////////////////
236
- /////////////////////////////////////////////////////////////////////////
237
-
238
- Directive::Directive(ParserState pstate, std::string kwd, Selector_List_Obj sel, Block_Obj b, Expression_Obj val)
239
- : Has_Block(pstate, b), keyword_(kwd), selector_(sel), value_(val) // set value manually if needed
215
+ AtRule::AtRule(SourceSpan pstate, sass::string kwd, SelectorListObj sel, Block_Obj b, ExpressionObj val)
216
+ : ParentStatement(pstate, b), keyword_(kwd), selector_(sel), value_(val) // set value manually if needed
240
217
  { statement_type(DIRECTIVE); }
241
- Directive::Directive(const Directive* ptr)
242
- : Has_Block(ptr),
218
+ AtRule::AtRule(const AtRule* ptr)
219
+ : ParentStatement(ptr),
243
220
  keyword_(ptr->keyword_),
244
221
  selector_(ptr->selector_),
245
222
  value_(ptr->value_) // set value manually if needed
246
223
  { statement_type(DIRECTIVE); }
247
224
 
248
- bool Directive::bubbles() { return is_keyframes() || is_media(); }
225
+ bool AtRule::bubbles() { return is_keyframes() || is_media(); }
249
226
 
250
- bool Directive::is_media() {
227
+ bool AtRule::is_media() {
251
228
  return keyword_.compare("@-webkit-media") == 0 ||
252
229
  keyword_.compare("@-moz-media") == 0 ||
253
230
  keyword_.compare("@-o-media") == 0 ||
254
231
  keyword_.compare("@media") == 0;
255
232
  }
256
- bool Directive::is_keyframes() {
233
+ bool AtRule::is_keyframes() {
257
234
  return keyword_.compare("@-webkit-keyframes") == 0 ||
258
235
  keyword_.compare("@-moz-keyframes") == 0 ||
259
236
  keyword_.compare("@-o-keyframes") == 0 ||
@@ -263,21 +240,21 @@ namespace Sass {
263
240
  /////////////////////////////////////////////////////////////////////////
264
241
  /////////////////////////////////////////////////////////////////////////
265
242
 
266
- Keyframe_Rule::Keyframe_Rule(ParserState pstate, Block_Obj b)
267
- : Has_Block(pstate, b), name_()
243
+ Keyframe_Rule::Keyframe_Rule(SourceSpan pstate, Block_Obj b)
244
+ : ParentStatement(pstate, b), name_()
268
245
  { statement_type(KEYFRAMERULE); }
269
246
  Keyframe_Rule::Keyframe_Rule(const Keyframe_Rule* ptr)
270
- : Has_Block(ptr), name_(ptr->name_)
247
+ : ParentStatement(ptr), name_(ptr->name_)
271
248
  { statement_type(KEYFRAMERULE); }
272
249
 
273
250
  /////////////////////////////////////////////////////////////////////////
274
251
  /////////////////////////////////////////////////////////////////////////
275
252
 
276
- Declaration::Declaration(ParserState pstate, String_Obj prop, Expression_Obj val, bool i, bool c, Block_Obj b)
277
- : Has_Block(pstate, b), property_(prop), value_(val), is_important_(i), is_custom_property_(c), is_indented_(false)
253
+ Declaration::Declaration(SourceSpan pstate, String_Obj prop, ExpressionObj val, bool i, bool c, Block_Obj b)
254
+ : ParentStatement(pstate, b), property_(prop), value_(val), is_important_(i), is_custom_property_(c), is_indented_(false)
278
255
  { statement_type(DECLARATION); }
279
256
  Declaration::Declaration(const Declaration* ptr)
280
- : Has_Block(ptr),
257
+ : ParentStatement(ptr),
281
258
  property_(ptr->property_),
282
259
  value_(ptr->value_),
283
260
  is_important_(ptr->is_important_),
@@ -294,7 +271,7 @@ namespace Sass {
294
271
  /////////////////////////////////////////////////////////////////////////
295
272
  /////////////////////////////////////////////////////////////////////////
296
273
 
297
- Assignment::Assignment(ParserState pstate, std::string var, Expression_Obj val, bool is_default, bool is_global)
274
+ Assignment::Assignment(SourceSpan pstate, sass::string var, ExpressionObj val, bool is_default, bool is_global)
298
275
  : Statement(pstate), variable_(var), value_(val), is_default_(is_default), is_global_(is_global)
299
276
  { statement_type(ASSIGNMENT); }
300
277
  Assignment::Assignment(const Assignment* ptr)
@@ -308,10 +285,10 @@ namespace Sass {
308
285
  /////////////////////////////////////////////////////////////////////////
309
286
  /////////////////////////////////////////////////////////////////////////
310
287
 
311
- Import::Import(ParserState pstate)
288
+ Import::Import(SourceSpan pstate)
312
289
  : Statement(pstate),
313
- urls_(std::vector<Expression_Obj>()),
314
- incs_(std::vector<Include>()),
290
+ urls_(sass::vector<ExpressionObj>()),
291
+ incs_(sass::vector<Include>()),
315
292
  import_queries_()
316
293
  { statement_type(IMPORT); }
317
294
  Import::Import(const Import* ptr)
@@ -321,56 +298,56 @@ namespace Sass {
321
298
  import_queries_(ptr->import_queries_)
322
299
  { statement_type(IMPORT); }
323
300
 
324
- std::vector<Include>& Import::incs() { return incs_; }
325
- std::vector<Expression_Obj>& Import::urls() { return urls_; }
301
+ sass::vector<Include>& Import::incs() { return incs_; }
302
+ sass::vector<ExpressionObj>& Import::urls() { return urls_; }
326
303
 
327
304
  /////////////////////////////////////////////////////////////////////////
328
305
  /////////////////////////////////////////////////////////////////////////
329
306
 
330
- Import_Stub::Import_Stub(ParserState pstate, Include res)
307
+ Import_Stub::Import_Stub(SourceSpan pstate, Include res)
331
308
  : Statement(pstate), resource_(res)
332
309
  { statement_type(IMPORT_STUB); }
333
310
  Import_Stub::Import_Stub(const Import_Stub* ptr)
334
311
  : Statement(ptr), resource_(ptr->resource_)
335
312
  { statement_type(IMPORT_STUB); }
336
313
  Include Import_Stub::resource() { return resource_; };
337
- std::string Import_Stub::imp_path() { return resource_.imp_path; };
338
- std::string Import_Stub::abs_path() { return resource_.abs_path; };
314
+ sass::string Import_Stub::imp_path() { return resource_.imp_path; };
315
+ sass::string Import_Stub::abs_path() { return resource_.abs_path; };
339
316
 
340
317
  /////////////////////////////////////////////////////////////////////////
341
318
  /////////////////////////////////////////////////////////////////////////
342
319
 
343
- Warning::Warning(ParserState pstate, Expression_Obj msg)
320
+ WarningRule::WarningRule(SourceSpan pstate, ExpressionObj msg)
344
321
  : Statement(pstate), message_(msg)
345
322
  { statement_type(WARNING); }
346
- Warning::Warning(const Warning* ptr)
323
+ WarningRule::WarningRule(const WarningRule* ptr)
347
324
  : Statement(ptr), message_(ptr->message_)
348
325
  { statement_type(WARNING); }
349
326
 
350
327
  /////////////////////////////////////////////////////////////////////////
351
328
  /////////////////////////////////////////////////////////////////////////
352
329
 
353
- Error::Error(ParserState pstate, Expression_Obj msg)
330
+ ErrorRule::ErrorRule(SourceSpan pstate, ExpressionObj msg)
354
331
  : Statement(pstate), message_(msg)
355
332
  { statement_type(ERROR); }
356
- Error::Error(const Error* ptr)
333
+ ErrorRule::ErrorRule(const ErrorRule* ptr)
357
334
  : Statement(ptr), message_(ptr->message_)
358
335
  { statement_type(ERROR); }
359
336
 
360
337
  /////////////////////////////////////////////////////////////////////////
361
338
  /////////////////////////////////////////////////////////////////////////
362
339
 
363
- Debug::Debug(ParserState pstate, Expression_Obj val)
340
+ DebugRule::DebugRule(SourceSpan pstate, ExpressionObj val)
364
341
  : Statement(pstate), value_(val)
365
342
  { statement_type(DEBUGSTMT); }
366
- Debug::Debug(const Debug* ptr)
343
+ DebugRule::DebugRule(const DebugRule* ptr)
367
344
  : Statement(ptr), value_(ptr->value_)
368
345
  { statement_type(DEBUGSTMT); }
369
346
 
370
347
  /////////////////////////////////////////////////////////////////////////
371
348
  /////////////////////////////////////////////////////////////////////////
372
349
 
373
- Comment::Comment(ParserState pstate, String_Obj txt, bool is_important)
350
+ Comment::Comment(SourceSpan pstate, String_Obj txt, bool is_important)
374
351
  : Statement(pstate), text_(txt), is_important_(is_important)
375
352
  { statement_type(COMMENT); }
376
353
  Comment::Comment(const Comment* ptr)
@@ -387,30 +364,30 @@ namespace Sass {
387
364
  /////////////////////////////////////////////////////////////////////////
388
365
  /////////////////////////////////////////////////////////////////////////
389
366
 
390
- If::If(ParserState pstate, Expression_Obj pred, Block_Obj con, Block_Obj alt)
391
- : Has_Block(pstate, con), predicate_(pred), alternative_(alt)
367
+ If::If(SourceSpan pstate, ExpressionObj pred, Block_Obj con, Block_Obj alt)
368
+ : ParentStatement(pstate, con), predicate_(pred), alternative_(alt)
392
369
  { statement_type(IF); }
393
370
  If::If(const If* ptr)
394
- : Has_Block(ptr),
371
+ : ParentStatement(ptr),
395
372
  predicate_(ptr->predicate_),
396
373
  alternative_(ptr->alternative_)
397
374
  { statement_type(IF); }
398
375
 
399
376
  bool If::has_content()
400
377
  {
401
- return Has_Block::has_content() || (alternative_ && alternative_->has_content());
378
+ return ParentStatement::has_content() || (alternative_ && alternative_->has_content());
402
379
  }
403
380
 
404
381
  /////////////////////////////////////////////////////////////////////////
405
382
  /////////////////////////////////////////////////////////////////////////
406
383
 
407
- For::For(ParserState pstate,
408
- std::string var, Expression_Obj lo, Expression_Obj hi, Block_Obj b, bool inc)
409
- : Has_Block(pstate, b),
384
+ ForRule::ForRule(SourceSpan pstate,
385
+ sass::string var, ExpressionObj lo, ExpressionObj hi, Block_Obj b, bool inc)
386
+ : ParentStatement(pstate, b),
410
387
  variable_(var), lower_bound_(lo), upper_bound_(hi), is_inclusive_(inc)
411
388
  { statement_type(FOR); }
412
- For::For(const For* ptr)
413
- : Has_Block(ptr),
389
+ ForRule::ForRule(const ForRule* ptr)
390
+ : ParentStatement(ptr),
414
391
  variable_(ptr->variable_),
415
392
  lower_bound_(ptr->lower_bound_),
416
393
  upper_bound_(ptr->upper_bound_),
@@ -420,27 +397,27 @@ namespace Sass {
420
397
  /////////////////////////////////////////////////////////////////////////
421
398
  /////////////////////////////////////////////////////////////////////////
422
399
 
423
- Each::Each(ParserState pstate, std::vector<std::string> vars, Expression_Obj lst, Block_Obj b)
424
- : Has_Block(pstate, b), variables_(vars), list_(lst)
400
+ EachRule::EachRule(SourceSpan pstate, sass::vector<sass::string> vars, ExpressionObj lst, Block_Obj b)
401
+ : ParentStatement(pstate, b), variables_(vars), list_(lst)
425
402
  { statement_type(EACH); }
426
- Each::Each(const Each* ptr)
427
- : Has_Block(ptr), variables_(ptr->variables_), list_(ptr->list_)
403
+ EachRule::EachRule(const EachRule* ptr)
404
+ : ParentStatement(ptr), variables_(ptr->variables_), list_(ptr->list_)
428
405
  { statement_type(EACH); }
429
406
 
430
407
  /////////////////////////////////////////////////////////////////////////
431
408
  /////////////////////////////////////////////////////////////////////////
432
409
 
433
- While::While(ParserState pstate, Expression_Obj pred, Block_Obj b)
434
- : Has_Block(pstate, b), predicate_(pred)
410
+ WhileRule::WhileRule(SourceSpan pstate, ExpressionObj pred, Block_Obj b)
411
+ : ParentStatement(pstate, b), predicate_(pred)
435
412
  { statement_type(WHILE); }
436
- While::While(const While* ptr)
437
- : Has_Block(ptr), predicate_(ptr->predicate_)
413
+ WhileRule::WhileRule(const WhileRule* ptr)
414
+ : ParentStatement(ptr), predicate_(ptr->predicate_)
438
415
  { statement_type(WHILE); }
439
416
 
440
417
  /////////////////////////////////////////////////////////////////////////
441
418
  /////////////////////////////////////////////////////////////////////////
442
419
 
443
- Return::Return(ParserState pstate, Expression_Obj val)
420
+ Return::Return(SourceSpan pstate, ExpressionObj val)
444
421
  : Statement(pstate), value_(val)
445
422
  { statement_type(RETURN); }
446
423
  Return::Return(const Return* ptr)
@@ -450,18 +427,26 @@ namespace Sass {
450
427
  /////////////////////////////////////////////////////////////////////////
451
428
  /////////////////////////////////////////////////////////////////////////
452
429
 
453
- Extension::Extension(ParserState pstate, Selector_List_Obj s)
454
- : Statement(pstate), selector_(s)
430
+ ExtendRule::ExtendRule(SourceSpan pstate, SelectorListObj s)
431
+ : Statement(pstate), isOptional_(false), selector_(s), schema_()
455
432
  { statement_type(EXTEND); }
456
- Extension::Extension(const Extension* ptr)
457
- : Statement(ptr), selector_(ptr->selector_)
433
+ ExtendRule::ExtendRule(SourceSpan pstate, Selector_Schema_Obj s)
434
+ : Statement(pstate), isOptional_(false), selector_(), schema_(s)
435
+ {
436
+ statement_type(EXTEND);
437
+ }
438
+ ExtendRule::ExtendRule(const ExtendRule* ptr)
439
+ : Statement(ptr),
440
+ isOptional_(ptr->isOptional_),
441
+ selector_(ptr->selector_),
442
+ schema_(ptr->schema_)
458
443
  { statement_type(EXTEND); }
459
444
 
460
445
  /////////////////////////////////////////////////////////////////////////
461
446
  /////////////////////////////////////////////////////////////////////////
462
447
 
463
448
  Definition::Definition(const Definition* ptr)
464
- : Has_Block(ptr),
449
+ : ParentStatement(ptr),
465
450
  name_(ptr->name_),
466
451
  parameters_(ptr->parameters_),
467
452
  environment_(ptr->environment_),
@@ -473,12 +458,12 @@ namespace Sass {
473
458
  signature_(ptr->signature_)
474
459
  { }
475
460
 
476
- Definition::Definition(ParserState pstate,
477
- std::string n,
461
+ Definition::Definition(SourceSpan pstate,
462
+ sass::string n,
478
463
  Parameters_Obj params,
479
464
  Block_Obj b,
480
465
  Type t)
481
- : Has_Block(pstate, b),
466
+ : ParentStatement(pstate, b),
482
467
  name_(n),
483
468
  parameters_(params),
484
469
  environment_(0),
@@ -490,13 +475,13 @@ namespace Sass {
490
475
  signature_(0)
491
476
  { }
492
477
 
493
- Definition::Definition(ParserState pstate,
478
+ Definition::Definition(SourceSpan pstate,
494
479
  Signature sig,
495
- std::string n,
480
+ sass::string n,
496
481
  Parameters_Obj params,
497
482
  Native_Function func_ptr,
498
483
  bool overload_stub)
499
- : Has_Block(pstate, {}),
484
+ : ParentStatement(pstate, {}),
500
485
  name_(n),
501
486
  parameters_(params),
502
487
  environment_(0),
@@ -508,12 +493,12 @@ namespace Sass {
508
493
  signature_(sig)
509
494
  { }
510
495
 
511
- Definition::Definition(ParserState pstate,
496
+ Definition::Definition(SourceSpan pstate,
512
497
  Signature sig,
513
- std::string n,
498
+ sass::string n,
514
499
  Parameters_Obj params,
515
500
  Sass_Function_Entry c_func)
516
- : Has_Block(pstate, {}),
501
+ : ParentStatement(pstate, {}),
517
502
  name_(n),
518
503
  parameters_(params),
519
504
  environment_(0),
@@ -528,11 +513,11 @@ namespace Sass {
528
513
  /////////////////////////////////////////////////////////////////////////
529
514
  /////////////////////////////////////////////////////////////////////////
530
515
 
531
- Mixin_Call::Mixin_Call(ParserState pstate, std::string n, Arguments_Obj args, Parameters_Obj b_params, Block_Obj b)
532
- : Has_Block(pstate, b), name_(n), arguments_(args), block_parameters_(b_params)
516
+ Mixin_Call::Mixin_Call(SourceSpan pstate, sass::string n, Arguments_Obj args, Parameters_Obj b_params, Block_Obj b)
517
+ : ParentStatement(pstate, b), name_(n), arguments_(args), block_parameters_(b_params)
533
518
  { }
534
519
  Mixin_Call::Mixin_Call(const Mixin_Call* ptr)
535
- : Has_Block(ptr),
520
+ : ParentStatement(ptr),
536
521
  name_(ptr->name_),
537
522
  arguments_(ptr->arguments_),
538
523
  block_parameters_(ptr->block_parameters_)
@@ -541,7 +526,7 @@ namespace Sass {
541
526
  /////////////////////////////////////////////////////////////////////////
542
527
  /////////////////////////////////////////////////////////////////////////
543
528
 
544
- Content::Content(ParserState pstate, Arguments_Obj args)
529
+ Content::Content(SourceSpan pstate, Arguments_Obj args)
545
530
  : Statement(pstate),
546
531
  arguments_(args)
547
532
  { statement_type(CONTENT); }
@@ -553,7 +538,7 @@ namespace Sass {
553
538
  /////////////////////////////////////////////////////////////////////////
554
539
  /////////////////////////////////////////////////////////////////////////
555
540
 
556
- Expression::Expression(ParserState pstate, bool d, bool e, bool i, Type ct)
541
+ Expression::Expression(SourceSpan pstate, bool d, bool e, bool i, Type ct)
557
542
  : AST_Node(pstate),
558
543
  is_delayed_(d),
559
544
  is_expanded_(e),
@@ -572,7 +557,7 @@ namespace Sass {
572
557
  /////////////////////////////////////////////////////////////////////////
573
558
  /////////////////////////////////////////////////////////////////////////
574
559
 
575
- Unary_Expression::Unary_Expression(ParserState pstate, Type t, Expression_Obj o)
560
+ Unary_Expression::Unary_Expression(SourceSpan pstate, Type t, ExpressionObj o)
576
561
  : Expression(pstate), optype_(t), operand_(o), hash_(0)
577
562
  { }
578
563
  Unary_Expression::Unary_Expression(const Unary_Expression* ptr)
@@ -581,7 +566,7 @@ namespace Sass {
581
566
  operand_(ptr->operand_),
582
567
  hash_(ptr->hash_)
583
568
  { }
584
- const std::string Unary_Expression::type_name() {
569
+ const sass::string Unary_Expression::type_name() {
585
570
  switch (optype_) {
586
571
  case PLUS: return "plus";
587
572
  case MINUS: return "minus";
@@ -617,7 +602,7 @@ namespace Sass {
617
602
  /////////////////////////////////////////////////////////////////////////
618
603
  /////////////////////////////////////////////////////////////////////////
619
604
 
620
- Argument::Argument(ParserState pstate, Expression_Obj val, std::string n, bool rest, bool keyword)
605
+ Argument::Argument(SourceSpan pstate, ExpressionObj val, sass::string n, bool rest, bool keyword)
621
606
  : Expression(pstate), value_(val), name_(n), is_rest_argument_(rest), is_keyword_argument_(keyword), hash_(0)
622
607
  {
623
608
  if (!name_.empty() && is_rest_argument_) {
@@ -661,7 +646,7 @@ namespace Sass {
661
646
  size_t Argument::hash() const
662
647
  {
663
648
  if (hash_ == 0) {
664
- hash_ = std::hash<std::string>()(name());
649
+ hash_ = std::hash<sass::string>()(name());
665
650
  hash_combine(hash_, value()->hash());
666
651
  }
667
652
  return hash_;
@@ -670,7 +655,7 @@ namespace Sass {
670
655
  /////////////////////////////////////////////////////////////////////////
671
656
  /////////////////////////////////////////////////////////////////////////
672
657
 
673
- Arguments::Arguments(ParserState pstate)
658
+ Arguments::Arguments(SourceSpan pstate)
674
659
  : Expression(pstate),
675
660
  Vectorized<Argument_Obj>(),
676
661
  has_named_arguments_(false),
@@ -753,13 +738,13 @@ namespace Sass {
753
738
  /////////////////////////////////////////////////////////////////////////
754
739
  /////////////////////////////////////////////////////////////////////////
755
740
 
756
- Media_Query::Media_Query(ParserState pstate, String_Obj t, size_t s, bool n, bool r)
757
- : Expression(pstate), Vectorized<Media_Query_Expression_Obj>(s),
741
+ Media_Query::Media_Query(SourceSpan pstate, String_Obj t, size_t s, bool n, bool r)
742
+ : Expression(pstate), Vectorized<Media_Query_ExpressionObj>(s),
758
743
  media_type_(t), is_negated_(n), is_restricted_(r)
759
744
  { }
760
745
  Media_Query::Media_Query(const Media_Query* ptr)
761
746
  : Expression(ptr),
762
- Vectorized<Media_Query_Expression_Obj>(*ptr),
747
+ Vectorized<Media_Query_ExpressionObj>(*ptr),
763
748
  media_type_(ptr->media_type_),
764
749
  is_negated_(ptr->is_negated_),
765
750
  is_restricted_(ptr->is_restricted_)
@@ -768,8 +753,8 @@ namespace Sass {
768
753
  /////////////////////////////////////////////////////////////////////////
769
754
  /////////////////////////////////////////////////////////////////////////
770
755
 
771
- Media_Query_Expression::Media_Query_Expression(ParserState pstate,
772
- Expression_Obj f, Expression_Obj v, bool i)
756
+ Media_Query_Expression::Media_Query_Expression(SourceSpan pstate,
757
+ ExpressionObj f, ExpressionObj v, bool i)
773
758
  : Expression(pstate), feature_(f), value_(v), is_interpolated_(i)
774
759
  { }
775
760
  Media_Query_Expression::Media_Query_Expression(const Media_Query_Expression* ptr)
@@ -782,7 +767,7 @@ namespace Sass {
782
767
  /////////////////////////////////////////////////////////////////////////
783
768
  /////////////////////////////////////////////////////////////////////////
784
769
 
785
- At_Root_Query::At_Root_Query(ParserState pstate, Expression_Obj f, Expression_Obj v, bool i)
770
+ At_Root_Query::At_Root_Query(SourceSpan pstate, ExpressionObj f, ExpressionObj v, bool i)
786
771
  : Expression(pstate), feature_(f), value_(v)
787
772
  { }
788
773
  At_Root_Query::At_Root_Query(const At_Root_Query* ptr)
@@ -791,11 +776,11 @@ namespace Sass {
791
776
  value_(ptr->value_)
792
777
  { }
793
778
 
794
- bool At_Root_Query::exclude(std::string str)
779
+ bool At_Root_Query::exclude(sass::string str)
795
780
  {
796
781
  bool with = feature() && unquote(feature()->to_string()).compare("with") == 0;
797
782
  List* l = static_cast<List*>(value().ptr());
798
- std::string v;
783
+ sass::string v;
799
784
 
800
785
  if (with)
801
786
  {
@@ -822,18 +807,18 @@ namespace Sass {
822
807
  /////////////////////////////////////////////////////////////////////////
823
808
  /////////////////////////////////////////////////////////////////////////
824
809
 
825
- At_Root_Block::At_Root_Block(ParserState pstate, Block_Obj b, At_Root_Query_Obj e)
826
- : Has_Block(pstate, b), expression_(e)
810
+ AtRootRule::AtRootRule(SourceSpan pstate, Block_Obj b, At_Root_Query_Obj e)
811
+ : ParentStatement(pstate, b), expression_(e)
827
812
  { statement_type(ATROOT); }
828
- At_Root_Block::At_Root_Block(const At_Root_Block* ptr)
829
- : Has_Block(ptr), expression_(ptr->expression_)
813
+ AtRootRule::AtRootRule(const AtRootRule* ptr)
814
+ : ParentStatement(ptr), expression_(ptr->expression_)
830
815
  { statement_type(ATROOT); }
831
816
 
832
- bool At_Root_Block::bubbles() {
817
+ bool AtRootRule::bubbles() {
833
818
  return true;
834
819
  }
835
820
 
836
- bool At_Root_Block::exclude_node(Statement_Obj s) {
821
+ bool AtRootRule::exclude_node(Statement_Obj s) {
837
822
  if (expression() == nullptr)
838
823
  {
839
824
  return s->statement_type() == Statement::RULESET;
@@ -841,9 +826,9 @@ namespace Sass {
841
826
 
842
827
  if (s->statement_type() == Statement::DIRECTIVE)
843
828
  {
844
- if (Directive_Obj dir = Cast<Directive>(s))
829
+ if (AtRuleObj dir = Cast<AtRule>(s))
845
830
  {
846
- std::string keyword(dir->keyword());
831
+ sass::string keyword(dir->keyword());
847
832
  if (keyword.length() > 0) keyword.erase(0, 1);
848
833
  return expression()->exclude(keyword);
849
834
  }
@@ -860,7 +845,7 @@ namespace Sass {
860
845
  {
861
846
  return expression()->exclude("supports");
862
847
  }
863
- if (Directive_Obj dir = Cast<Directive>(s))
848
+ if (AtRuleObj dir = Cast<AtRule>(s))
864
849
  {
865
850
  if (dir->is_keyframes()) return expression()->exclude("keyframes");
866
851
  }
@@ -870,7 +855,7 @@ namespace Sass {
870
855
  /////////////////////////////////////////////////////////////////////////
871
856
  /////////////////////////////////////////////////////////////////////////
872
857
 
873
- Parameter::Parameter(ParserState pstate, std::string n, Expression_Obj def, bool rest)
858
+ Parameter::Parameter(SourceSpan pstate, sass::string n, ExpressionObj def, bool rest)
874
859
  : AST_Node(pstate), name_(n), default_value_(def), is_rest_parameter_(rest)
875
860
  { }
876
861
  Parameter::Parameter(const Parameter* ptr)
@@ -883,7 +868,7 @@ namespace Sass {
883
868
  /////////////////////////////////////////////////////////////////////////
884
869
  /////////////////////////////////////////////////////////////////////////
885
870
 
886
- Parameters::Parameters(ParserState pstate)
871
+ Parameters::Parameters(SourceSpan pstate)
887
872
  : AST_Node(pstate),
888
873
  Vectorized<Parameter_Obj>(),
889
874
  has_optional_parameters_(false),
@@ -923,23 +908,28 @@ namespace Sass {
923
908
  /////////////////////////////////////////////////////////////////////////
924
909
  /////////////////////////////////////////////////////////////////////////
925
910
 
926
- IMPLEMENT_AST_OPERATORS(Ruleset);
927
- IMPLEMENT_AST_OPERATORS(Media_Block);
911
+ // If you forget to add a class here you will get
912
+ // undefined reference to `vtable for Sass::Class'
913
+
914
+ IMPLEMENT_AST_OPERATORS(StyleRule);
915
+ IMPLEMENT_AST_OPERATORS(MediaRule);
916
+ IMPLEMENT_AST_OPERATORS(CssMediaRule);
917
+ IMPLEMENT_AST_OPERATORS(CssMediaQuery);
928
918
  IMPLEMENT_AST_OPERATORS(Import);
929
919
  IMPLEMENT_AST_OPERATORS(Import_Stub);
930
- IMPLEMENT_AST_OPERATORS(Directive);
931
- IMPLEMENT_AST_OPERATORS(At_Root_Block);
932
- IMPLEMENT_AST_OPERATORS(While);
933
- IMPLEMENT_AST_OPERATORS(Each);
934
- IMPLEMENT_AST_OPERATORS(For);
920
+ IMPLEMENT_AST_OPERATORS(AtRule);
921
+ IMPLEMENT_AST_OPERATORS(AtRootRule);
922
+ IMPLEMENT_AST_OPERATORS(WhileRule);
923
+ IMPLEMENT_AST_OPERATORS(EachRule);
924
+ IMPLEMENT_AST_OPERATORS(ForRule);
935
925
  IMPLEMENT_AST_OPERATORS(If);
936
926
  IMPLEMENT_AST_OPERATORS(Mixin_Call);
937
- IMPLEMENT_AST_OPERATORS(Extension);
927
+ IMPLEMENT_AST_OPERATORS(ExtendRule);
938
928
  IMPLEMENT_AST_OPERATORS(Media_Query);
939
929
  IMPLEMENT_AST_OPERATORS(Media_Query_Expression);
940
- IMPLEMENT_AST_OPERATORS(Debug);
941
- IMPLEMENT_AST_OPERATORS(Error);
942
- IMPLEMENT_AST_OPERATORS(Warning);
930
+ IMPLEMENT_AST_OPERATORS(DebugRule);
931
+ IMPLEMENT_AST_OPERATORS(ErrorRule);
932
+ IMPLEMENT_AST_OPERATORS(WarningRule);
943
933
  IMPLEMENT_AST_OPERATORS(Assignment);
944
934
  IMPLEMENT_AST_OPERATORS(Return);
945
935
  IMPLEMENT_AST_OPERATORS(At_Root_Query);