sassc 2.1.0.pre3 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/CHANGELOG.md +24 -0
  4. data/Rakefile +2 -4
  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.hpp +12 -0
  81. data/ext/libsass/src/memory/allocator.cpp +48 -0
  82. data/ext/libsass/src/memory/allocator.hpp +138 -0
  83. data/ext/libsass/src/memory/config.hpp +20 -0
  84. data/ext/libsass/src/memory/memory_pool.hpp +186 -0
  85. data/ext/libsass/src/memory/{SharedPtr.cpp → shared_ptr.cpp} +2 -2
  86. data/ext/libsass/src/memory/{SharedPtr.hpp → shared_ptr.hpp} +55 -9
  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 +11 -13
  132. data/lib/sassc/native.rb +9 -7
  133. data/lib/sassc/script.rb +4 -6
  134. data/lib/sassc/version.rb +1 -1
  135. data/test/functions_test.rb +38 -1
  136. data/test/native_test.rb +4 -4
  137. metadata +31 -18
  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
@@ -4,35 +4,7 @@
4
4
  // sass.hpp must go before all system headers to get the
5
5
  // __EXTENSIONS__ fix on Solaris.
6
6
  #include "sass.hpp"
7
-
8
- #include <set>
9
- #include <deque>
10
- #include <vector>
11
- #include <string>
12
- #include <sstream>
13
- #include <iostream>
14
- #include <typeinfo>
15
- #include <algorithm>
16
- #include "sass/base.h"
17
- #include "ast_fwd_decl.hpp"
18
-
19
- #include "util.hpp"
20
- #include "units.hpp"
21
- #include "context.hpp"
22
- #include "position.hpp"
23
- #include "constants.hpp"
24
- #include "operation.hpp"
25
- #include "position.hpp"
26
- #include "inspect.hpp"
27
- #include "source_map.hpp"
28
- #include "environment.hpp"
29
- #include "error_handling.hpp"
30
- #include "ast_def_macros.hpp"
31
- #include "ast_fwd_decl.hpp"
32
- #include "source_map.hpp"
33
- #include "fn_utils.hpp"
34
-
35
- #include "sass.h"
7
+ #include "ast.hpp"
36
8
 
37
9
  namespace Sass {
38
10
 
@@ -41,7 +13,7 @@ namespace Sass {
41
13
  //////////////////////////////////////////////////////////////////////
42
14
  class PreValue : public Expression {
43
15
  public:
44
- PreValue(ParserState pstate, bool d = false, bool e = false, bool i = false, Type ct = NONE);
16
+ PreValue(SourceSpan pstate, bool d = false, bool e = false, bool i = false, Type ct = NONE);
45
17
  ATTACH_VIRTUAL_AST_OPERATIONS(PreValue);
46
18
  virtual ~PreValue() { }
47
19
  };
@@ -51,36 +23,53 @@ namespace Sass {
51
23
  //////////////////////////////////////////////////////////////////////
52
24
  class Value : public PreValue {
53
25
  public:
54
- Value(ParserState pstate, bool d = false, bool e = false, bool i = false, Type ct = NONE);
55
- ATTACH_VIRTUAL_AST_OPERATIONS(Value);
26
+ Value(SourceSpan pstate, bool d = false, bool e = false, bool i = false, Type ct = NONE);
27
+
28
+ // Some obects are not meant to be compared
29
+ // ToDo: maybe fallback to pointer comparison?
30
+ virtual bool operator< (const Expression& rhs) const override = 0;
56
31
  virtual bool operator== (const Expression& rhs) const override = 0;
32
+
33
+ // We can give some reasonable implementations by using
34
+ // inverst operators on the specialized implementations
35
+ virtual bool operator> (const Expression& rhs) const {
36
+ return rhs < *this;
37
+ }
38
+ virtual bool operator!= (const Expression& rhs) const {
39
+ return !(*this == rhs);
40
+ }
41
+
42
+ ATTACH_VIRTUAL_AST_OPERATIONS(Value);
43
+
57
44
  };
58
45
 
59
46
  ///////////////////////////////////////////////////////////////////////
60
47
  // Lists of values, both comma- and space-separated (distinguished by a
61
48
  // type-tag.) Also used to represent variable-length argument lists.
62
49
  ///////////////////////////////////////////////////////////////////////
63
- class List : public Value, public Vectorized<Expression_Obj> {
64
- void adjust_after_pushing(Expression_Obj e) override { is_expanded(false); }
50
+ class List : public Value, public Vectorized<ExpressionObj> {
51
+ void adjust_after_pushing(ExpressionObj e) override { is_expanded(false); }
65
52
  private:
66
53
  ADD_PROPERTY(enum Sass_Separator, separator)
67
54
  ADD_PROPERTY(bool, is_arglist)
68
55
  ADD_PROPERTY(bool, is_bracketed)
69
56
  ADD_PROPERTY(bool, from_selector)
70
57
  public:
71
- List(ParserState pstate, size_t size = 0, enum Sass_Separator sep = SASS_SPACE, bool argl = false, bool bracket = false);
72
- std::string type() const override { return is_arglist_ ? "arglist" : "list"; }
73
- static std::string type_name() { return "list"; }
58
+ List(SourceSpan pstate, size_t size = 0, enum Sass_Separator sep = SASS_SPACE, bool argl = false, bool bracket = false);
59
+ sass::string type() const override { return is_arglist_ ? "arglist" : "list"; }
60
+ static sass::string type_name() { return "list"; }
74
61
  const char* sep_string(bool compressed = false) const {
75
62
  return separator() == SASS_SPACE ?
76
63
  " " : (compressed ? "," : ", ");
77
64
  }
78
65
  bool is_invisible() const override { return empty() && !is_bracketed(); }
79
- Expression_Obj value_at_index(size_t i);
66
+ ExpressionObj value_at_index(size_t i);
80
67
 
81
68
  virtual size_t hash() const override;
82
69
  virtual size_t size() const;
83
70
  virtual void set_delayed(bool delayed) override;
71
+
72
+ virtual bool operator< (const Expression& rhs) const override;
84
73
  virtual bool operator== (const Expression& rhs) const override;
85
74
 
86
75
  ATTACH_AST_OPERATIONS(List)
@@ -90,16 +79,18 @@ namespace Sass {
90
79
  ///////////////////////////////////////////////////////////////////////
91
80
  // Key value paris.
92
81
  ///////////////////////////////////////////////////////////////////////
93
- class Map : public Value, public Hashed {
94
- void adjust_after_pushing(std::pair<Expression_Obj, Expression_Obj> p) override { is_expanded(false); }
82
+ class Map : public Value, public Hashed<ExpressionObj, ExpressionObj, Map_Obj> {
83
+ void adjust_after_pushing(std::pair<ExpressionObj, ExpressionObj> p) override { is_expanded(false); }
95
84
  public:
96
- Map(ParserState pstate, size_t size = 0);
97
- std::string type() const override { return "map"; }
98
- static std::string type_name() { return "map"; }
85
+ Map(SourceSpan pstate, size_t size = 0);
86
+ sass::string type() const override { return "map"; }
87
+ static sass::string type_name() { return "map"; }
99
88
  bool is_invisible() const override { return empty(); }
100
- List_Obj to_list(ParserState& pstate);
89
+ List_Obj to_list(SourceSpan& pstate);
101
90
 
102
91
  virtual size_t hash() const override;
92
+
93
+ virtual bool operator< (const Expression& rhs) const override;
103
94
  virtual bool operator== (const Expression& rhs) const override;
104
95
 
105
96
  ATTACH_AST_OPERATIONS(Map)
@@ -115,21 +106,22 @@ namespace Sass {
115
106
  class Binary_Expression : public PreValue {
116
107
  private:
117
108
  HASH_PROPERTY(Operand, op)
118
- HASH_PROPERTY(Expression_Obj, left)
119
- HASH_PROPERTY(Expression_Obj, right)
109
+ HASH_PROPERTY(ExpressionObj, left)
110
+ HASH_PROPERTY(ExpressionObj, right)
120
111
  mutable size_t hash_;
121
112
  public:
122
- Binary_Expression(ParserState pstate,
123
- Operand op, Expression_Obj lhs, Expression_Obj rhs);
113
+ Binary_Expression(SourceSpan pstate,
114
+ Operand op, ExpressionObj lhs, ExpressionObj rhs);
124
115
 
125
- const std::string type_name();
126
- const std::string separator();
116
+ const sass::string type_name();
117
+ const sass::string separator();
127
118
  bool is_left_interpolant(void) const override;
128
119
  bool is_right_interpolant(void) const override;
129
120
  bool has_interpolant() const override;
130
121
 
131
122
  virtual void set_delayed(bool delayed) override;
132
123
 
124
+ virtual bool operator< (const Expression& rhs) const override;
133
125
  virtual bool operator==(const Expression& rhs) const override;
134
126
 
135
127
  virtual size_t hash() const override;
@@ -146,14 +138,15 @@ namespace Sass {
146
138
  ADD_PROPERTY(Definition_Obj, definition)
147
139
  ADD_PROPERTY(bool, is_css)
148
140
  public:
149
- Function(ParserState pstate, Definition_Obj def, bool css);
141
+ Function(SourceSpan pstate, Definition_Obj def, bool css);
150
142
 
151
- std::string type() const override { return "function"; }
152
- static std::string type_name() { return "function"; }
143
+ sass::string type() const override { return "function"; }
144
+ static sass::string type_name() { return "function"; }
153
145
  bool is_invisible() const override { return true; }
154
146
 
155
- std::string name();
147
+ sass::string name();
156
148
 
149
+ bool operator< (const Expression& rhs) const override;
157
150
  bool operator== (const Expression& rhs) const override;
158
151
 
159
152
  ATTACH_AST_OPERATIONS(Function)
@@ -171,15 +164,15 @@ namespace Sass {
171
164
  ADD_PROPERTY(void*, cookie)
172
165
  mutable size_t hash_;
173
166
  public:
174
- Function_Call(ParserState pstate, std::string n, Arguments_Obj args, void* cookie);
175
- Function_Call(ParserState pstate, std::string n, Arguments_Obj args, Function_Obj func);
176
- Function_Call(ParserState pstate, std::string n, Arguments_Obj args);
167
+ Function_Call(SourceSpan pstate, sass::string n, Arguments_Obj args, void* cookie);
168
+ Function_Call(SourceSpan pstate, sass::string n, Arguments_Obj args, Function_Obj func);
169
+ Function_Call(SourceSpan pstate, sass::string n, Arguments_Obj args);
177
170
 
178
- Function_Call(ParserState pstate, String_Obj n, Arguments_Obj args, void* cookie);
179
- Function_Call(ParserState pstate, String_Obj n, Arguments_Obj args, Function_Obj func);
180
- Function_Call(ParserState pstate, String_Obj n, Arguments_Obj args);
171
+ Function_Call(SourceSpan pstate, String_Obj n, Arguments_Obj args, void* cookie);
172
+ Function_Call(SourceSpan pstate, String_Obj n, Arguments_Obj args, Function_Obj func);
173
+ Function_Call(SourceSpan pstate, String_Obj n, Arguments_Obj args);
181
174
 
182
- std::string name() const;
175
+ sass::string name() const;
183
176
  bool is_css();
184
177
 
185
178
  bool operator==(const Expression& rhs) const override;
@@ -194,9 +187,9 @@ namespace Sass {
194
187
  // Variable references.
195
188
  ///////////////////////
196
189
  class Variable final : public PreValue {
197
- ADD_CONSTREF(std::string, name)
190
+ ADD_CONSTREF(sass::string, name)
198
191
  public:
199
- Variable(ParserState pstate, std::string n);
192
+ Variable(SourceSpan pstate, sass::string n);
200
193
  virtual bool operator==(const Expression& rhs) const override;
201
194
  virtual size_t hash() const override;
202
195
  ATTACH_AST_OPERATIONS(Variable)
@@ -211,12 +204,12 @@ namespace Sass {
211
204
  ADD_PROPERTY(bool, zero)
212
205
  mutable size_t hash_;
213
206
  public:
214
- Number(ParserState pstate, double val, std::string u = "", bool zero = true);
207
+ Number(SourceSpan pstate, double val, sass::string u = "", bool zero = true);
215
208
 
216
209
  bool zero() { return zero_; }
217
210
 
218
- std::string type() const override { return "number"; }
219
- static std::string type_name() { return "number"; }
211
+ sass::string type() const override { return "number"; }
212
+ static sass::string type_name() { return "number"; }
220
213
 
221
214
  // cancel out unnecessary units
222
215
  // result will be in input units
@@ -230,6 +223,7 @@ namespace Sass {
230
223
 
231
224
  bool operator< (const Number& rhs) const;
232
225
  bool operator== (const Number& rhs) const;
226
+ bool operator< (const Expression& rhs) const override;
233
227
  bool operator== (const Expression& rhs) const override;
234
228
  ATTACH_AST_OPERATIONS(Number)
235
229
  ATTACH_CRTP_PERFORM_METHODS()
@@ -239,18 +233,19 @@ namespace Sass {
239
233
  // Colors.
240
234
  //////////
241
235
  class Color : public Value {
242
- ADD_CONSTREF(std::string, disp)
236
+ ADD_CONSTREF(sass::string, disp)
243
237
  HASH_PROPERTY(double, a)
244
238
  protected:
245
239
  mutable size_t hash_;
246
240
  public:
247
- Color(ParserState pstate, double a = 1, const std::string disp = "");
241
+ Color(SourceSpan pstate, double a = 1, const sass::string disp = "");
248
242
 
249
- std::string type() const override { return "color"; }
250
- static std::string type_name() { return "color"; }
243
+ sass::string type() const override { return "color"; }
244
+ static sass::string type_name() { return "color"; }
251
245
 
252
246
  virtual size_t hash() const override = 0;
253
247
 
248
+ bool operator< (const Expression& rhs) const override;
254
249
  bool operator== (const Expression& rhs) const override;
255
250
 
256
251
  virtual Color_RGBA* copyAsRGBA() const = 0;
@@ -270,10 +265,10 @@ namespace Sass {
270
265
  HASH_PROPERTY(double, g)
271
266
  HASH_PROPERTY(double, b)
272
267
  public:
273
- Color_RGBA(ParserState pstate, double r, double g, double b, double a = 1, const std::string disp = "");
268
+ Color_RGBA(SourceSpan pstate, double r, double g, double b, double a = 1, const sass::string disp = "");
274
269
 
275
- std::string type() const override { return "color"; }
276
- static std::string type_name() { return "color"; }
270
+ sass::string type() const override { return "color"; }
271
+ static sass::string type_name() { return "color"; }
277
272
 
278
273
  size_t hash() const override;
279
274
 
@@ -283,6 +278,7 @@ namespace Sass {
283
278
  Color_HSLA* copyAsHSLA() const override;
284
279
  Color_HSLA* toHSLA() override { return copyAsHSLA(); }
285
280
 
281
+ bool operator< (const Expression& rhs) const override;
286
282
  bool operator== (const Expression& rhs) const override;
287
283
 
288
284
  ATTACH_AST_OPERATIONS(Color_RGBA)
@@ -298,10 +294,10 @@ namespace Sass {
298
294
  HASH_PROPERTY(double, s)
299
295
  HASH_PROPERTY(double, l)
300
296
  public:
301
- Color_HSLA(ParserState pstate, double h, double s, double l, double a = 1, const std::string disp = "");
297
+ Color_HSLA(SourceSpan pstate, double h, double s, double l, double a = 1, const sass::string disp = "");
302
298
 
303
- std::string type() const override { return "color"; }
304
- static std::string type_name() { return "color"; }
299
+ sass::string type() const override { return "color"; }
300
+ static sass::string type_name() { return "color"; }
305
301
 
306
302
  size_t hash() const override;
307
303
 
@@ -311,6 +307,7 @@ namespace Sass {
311
307
  Color_HSLA* copyAsHSLA() const override;
312
308
  Color_HSLA* toHSLA() override { return this; }
313
309
 
310
+ bool operator< (const Expression& rhs) const override;
314
311
  bool operator== (const Expression& rhs) const override;
315
312
 
316
313
  ATTACH_AST_OPERATIONS(Color_HSLA)
@@ -321,9 +318,10 @@ namespace Sass {
321
318
  // Errors from Sass_Values.
322
319
  //////////////////////////////
323
320
  class Custom_Error final : public Value {
324
- ADD_CONSTREF(std::string, message)
321
+ ADD_CONSTREF(sass::string, message)
325
322
  public:
326
- Custom_Error(ParserState pstate, std::string msg);
323
+ Custom_Error(SourceSpan pstate, sass::string msg);
324
+ bool operator< (const Expression& rhs) const override;
327
325
  bool operator== (const Expression& rhs) const override;
328
326
  ATTACH_AST_OPERATIONS(Custom_Error)
329
327
  ATTACH_CRTP_PERFORM_METHODS()
@@ -333,9 +331,10 @@ namespace Sass {
333
331
  // Warnings from Sass_Values.
334
332
  //////////////////////////////
335
333
  class Custom_Warning final : public Value {
336
- ADD_CONSTREF(std::string, message)
334
+ ADD_CONSTREF(sass::string, message)
337
335
  public:
338
- Custom_Warning(ParserState pstate, std::string msg);
336
+ Custom_Warning(SourceSpan pstate, sass::string msg);
337
+ bool operator< (const Expression& rhs) const override;
339
338
  bool operator== (const Expression& rhs) const override;
340
339
  ATTACH_AST_OPERATIONS(Custom_Warning)
341
340
  ATTACH_CRTP_PERFORM_METHODS()
@@ -348,16 +347,17 @@ namespace Sass {
348
347
  HASH_PROPERTY(bool, value)
349
348
  mutable size_t hash_;
350
349
  public:
351
- Boolean(ParserState pstate, bool val);
350
+ Boolean(SourceSpan pstate, bool val);
352
351
  operator bool() override { return value_; }
353
352
 
354
- std::string type() const override { return "bool"; }
355
- static std::string type_name() { return "bool"; }
353
+ sass::string type() const override { return "bool"; }
354
+ static sass::string type_name() { return "bool"; }
356
355
 
357
356
  size_t hash() const override;
358
357
 
359
358
  bool is_false() override { return !value_; }
360
359
 
360
+ bool operator< (const Expression& rhs) const override;
361
361
  bool operator== (const Expression& rhs) const override;
362
362
 
363
363
  ATTACH_AST_OPERATIONS(Boolean)
@@ -370,13 +370,16 @@ namespace Sass {
370
370
  ////////////////////////////////////////////////////////////////////////
371
371
  class String : public Value {
372
372
  public:
373
- String(ParserState pstate, bool delayed = false);
374
- static std::string type_name() { return "string"; }
373
+ String(SourceSpan pstate, bool delayed = false);
374
+ static sass::string type_name() { return "string"; }
375
375
  virtual ~String() = 0;
376
376
  virtual void rtrim() = 0;
377
377
  virtual bool operator<(const Expression& rhs) const override {
378
378
  return this->to_string() < rhs.to_string();
379
379
  };
380
+ virtual bool operator==(const Expression& rhs) const override {
381
+ return this->to_string() == rhs.to_string();
382
+ };
380
383
  ATTACH_VIRTUAL_AST_OPERATIONS(String);
381
384
  ATTACH_CRTP_PERFORM_METHODS()
382
385
  };
@@ -386,14 +389,14 @@ namespace Sass {
386
389
  // Interpolated strings. Meant to be reduced to flat strings during the
387
390
  // evaluation phase.
388
391
  ///////////////////////////////////////////////////////////////////////
389
- class String_Schema final : public String, public Vectorized<PreValue_Obj> {
392
+ class String_Schema final : public String, public Vectorized<PreValueObj> {
390
393
  ADD_PROPERTY(bool, css)
391
394
  mutable size_t hash_;
392
395
  public:
393
- String_Schema(ParserState pstate, size_t size = 0, bool css = true);
396
+ String_Schema(SourceSpan pstate, size_t size = 0, bool css = true);
394
397
 
395
- std::string type() const override { return "string"; }
396
- static std::string type_name() { return "string"; }
398
+ sass::string type() const override { return "string"; }
399
+ static sass::string type_name() { return "string"; }
397
400
 
398
401
  bool is_left_interpolant(void) const override;
399
402
  bool is_right_interpolant(void) const override;
@@ -403,6 +406,7 @@ namespace Sass {
403
406
  size_t hash() const override;
404
407
  virtual void set_delayed(bool delayed) override;
405
408
 
409
+ bool operator< (const Expression& rhs) const override;
406
410
  bool operator==(const Expression& rhs) const override;
407
411
  ATTACH_AST_OPERATIONS(String_Schema)
408
412
  ATTACH_CRTP_PERFORM_METHODS()
@@ -413,23 +417,23 @@ namespace Sass {
413
417
  ////////////////////////////////////////////////////////
414
418
  class String_Constant : public String {
415
419
  ADD_PROPERTY(char, quote_mark)
416
- ADD_PROPERTY(bool, can_compress_whitespace)
417
- HASH_CONSTREF(std::string, value)
420
+ HASH_CONSTREF(sass::string, value)
418
421
  protected:
419
422
  mutable size_t hash_;
420
423
  public:
421
- String_Constant(ParserState pstate, std::string val, bool css = true);
422
- String_Constant(ParserState pstate, const char* beg, bool css = true);
423
- String_Constant(ParserState pstate, const char* beg, const char* end, bool css = true);
424
- String_Constant(ParserState pstate, const Token& tok, bool css = true);
425
- std::string type() const override { return "string"; }
426
- static std::string type_name() { return "string"; }
424
+ String_Constant(SourceSpan pstate, sass::string val, bool css = true);
425
+ String_Constant(SourceSpan pstate, const char* beg, bool css = true);
426
+ String_Constant(SourceSpan pstate, const char* beg, const char* end, bool css = true);
427
+ String_Constant(SourceSpan pstate, const Token& tok, bool css = true);
428
+ sass::string type() const override { return "string"; }
429
+ static sass::string type_name() { return "string"; }
427
430
  bool is_invisible() const override;
428
431
  virtual void rtrim() override;
429
432
  size_t hash() const override;
433
+ bool operator< (const Expression& rhs) const override;
430
434
  bool operator==(const Expression& rhs) const override;
431
435
  // quotes are forced on inspection
432
- virtual std::string inspect() const override;
436
+ virtual sass::string inspect() const override;
433
437
  ATTACH_AST_OPERATIONS(String_Constant)
434
438
  ATTACH_CRTP_PERFORM_METHODS()
435
439
  };
@@ -439,12 +443,13 @@ namespace Sass {
439
443
  ////////////////////////////////////////////////////////
440
444
  class String_Quoted final : public String_Constant {
441
445
  public:
442
- String_Quoted(ParserState pstate, std::string val, char q = 0,
446
+ String_Quoted(SourceSpan pstate, sass::string val, char q = 0,
443
447
  bool keep_utf8_escapes = false, bool skip_unquoting = false,
444
448
  bool strict_unquoting = true, bool css = true);
449
+ bool operator< (const Expression& rhs) const override;
445
450
  bool operator==(const Expression& rhs) const override;
446
451
  // quotes are forced on inspection
447
- std::string inspect() const override;
452
+ sass::string inspect() const override;
448
453
  ATTACH_AST_OPERATIONS(String_Quoted)
449
454
  ATTACH_CRTP_PERFORM_METHODS()
450
455
  };
@@ -454,15 +459,16 @@ namespace Sass {
454
459
  //////////////////
455
460
  class Null final : public Value {
456
461
  public:
457
- Null(ParserState pstate);
458
- std::string type() const override { return "null"; }
459
- static std::string type_name() { return "null"; }
462
+ Null(SourceSpan pstate);
463
+ sass::string type() const override { return "null"; }
464
+ static sass::string type_name() { return "null"; }
460
465
  bool is_invisible() const override { return true; }
461
466
  operator bool() override { return false; }
462
467
  bool is_false() override { return true; }
463
468
 
464
469
  size_t hash() const override;
465
470
 
471
+ bool operator< (const Expression& rhs) const override;
466
472
  bool operator== (const Expression& rhs) const override;
467
473
 
468
474
  ATTACH_AST_OPERATIONS(Null)
@@ -474,11 +480,14 @@ namespace Sass {
474
480
  //////////////////////////////////
475
481
  class Parent_Reference final : public Value {
476
482
  public:
477
- Parent_Reference(ParserState pstate);
478
- std::string type() const override { return "parent"; }
479
- static std::string type_name() { return "parent"; }
483
+ Parent_Reference(SourceSpan pstate);
484
+ sass::string type() const override { return "parent"; }
485
+ static sass::string type_name() { return "parent"; }
486
+ bool operator< (const Expression& rhs) const override {
487
+ return false; // they are always equal
488
+ }
480
489
  bool operator==(const Expression& rhs) const override {
481
- return true; // can they ever be not equal?
490
+ return true; // they are always equal
482
491
  };
483
492
  ATTACH_AST_OPERATIONS(Parent_Reference)
484
493
  ATTACH_CRTP_PERFORM_METHODS()