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
@@ -70,18 +70,18 @@ private:
70
70
  #ifdef DEBUG_SHARED_PTR
71
71
 
72
72
  #define ATTACH_ABSTRACT_AST_OPERATIONS(klass) \
73
- virtual klass* copy(std::string, size_t) const = 0; \
74
- virtual klass* clone(std::string, size_t) const = 0; \
73
+ virtual klass* copy(sass::string, size_t) const = 0; \
74
+ virtual klass* clone(sass::string, size_t) const = 0; \
75
75
 
76
76
  #define ATTACH_VIRTUAL_AST_OPERATIONS(klass) \
77
77
  klass(const klass* ptr); \
78
- virtual klass* copy(std::string, size_t) const override = 0; \
79
- virtual klass* clone(std::string, size_t) const override = 0; \
78
+ virtual klass* copy(sass::string, size_t) const override = 0; \
79
+ virtual klass* clone(sass::string, size_t) const override = 0; \
80
80
 
81
81
  #define ATTACH_AST_OPERATIONS(klass) \
82
82
  klass(const klass* ptr); \
83
- virtual klass* copy(std::string, size_t) const override; \
84
- virtual klass* clone(std::string, size_t) const override; \
83
+ virtual klass* copy(sass::string, size_t) const override; \
84
+ virtual klass* clone(sass::string, size_t) const override; \
85
85
 
86
86
  #else
87
87
 
@@ -101,15 +101,23 @@ private:
101
101
 
102
102
  #endif
103
103
 
104
+ #define ATTACH_VIRTUAL_CMP_OPERATIONS(klass) \
105
+ virtual bool operator==(const klass& rhs) const = 0; \
106
+ virtual bool operator!=(const klass& rhs) const { return !(*this == rhs); }; \
107
+
108
+ #define ATTACH_CMP_OPERATIONS(klass) \
109
+ virtual bool operator==(const klass& rhs) const; \
110
+ virtual bool operator!=(const klass& rhs) const { return !(*this == rhs); }; \
111
+
104
112
  #ifdef DEBUG_SHARED_PTR
105
113
 
106
114
  #define IMPLEMENT_AST_OPERATORS(klass) \
107
- klass* klass::copy(std::string file, size_t line) const { \
108
- klass* cpy = new klass(this); \
115
+ klass* klass::copy(sass::string file, size_t line) const { \
116
+ klass* cpy = SASS_MEMORY_NEW(klass, this); \
109
117
  cpy->trace(file, line); \
110
118
  return cpy; \
111
119
  } \
112
- klass* klass::clone(std::string file, size_t line) const { \
120
+ klass* klass::clone(sass::string file, size_t line) const { \
113
121
  klass* cpy = copy(file, line); \
114
122
  cpy->cloneChildren(); \
115
123
  return cpy; \
@@ -119,7 +127,7 @@ private:
119
127
 
120
128
  #define IMPLEMENT_AST_OPERATORS(klass) \
121
129
  klass* klass::copy() const { \
122
- return new klass(this); \
130
+ return SASS_MEMORY_NEW(klass, this); \
123
131
  } \
124
132
  klass* klass::clone() const { \
125
133
  klass* cpy = copy(); \
@@ -16,15 +16,16 @@ namespace Sass {
16
16
  IMPLEMENT_BASE_CAST(AST_Node)
17
17
  IMPLEMENT_BASE_CAST(Expression)
18
18
  IMPLEMENT_BASE_CAST(Statement)
19
- IMPLEMENT_BASE_CAST(Has_Block)
19
+ IMPLEMENT_BASE_CAST(ParentStatement)
20
20
  IMPLEMENT_BASE_CAST(PreValue)
21
21
  IMPLEMENT_BASE_CAST(Value)
22
22
  IMPLEMENT_BASE_CAST(Color)
23
23
  IMPLEMENT_BASE_CAST(List)
24
24
  IMPLEMENT_BASE_CAST(String)
25
25
  IMPLEMENT_BASE_CAST(String_Constant)
26
- IMPLEMENT_BASE_CAST(Supports_Condition)
26
+ IMPLEMENT_BASE_CAST(SupportsCondition)
27
27
  IMPLEMENT_BASE_CAST(Selector)
28
- IMPLEMENT_BASE_CAST(Simple_Selector)
28
+ IMPLEMENT_BASE_CAST(SelectorComponent)
29
+ IMPLEMENT_BASE_CAST(SimpleSelector)
29
30
 
30
31
  }
@@ -1,16 +1,10 @@
1
1
  #ifndef SASS_AST_FWD_DECL_H
2
2
  #define SASS_AST_FWD_DECL_H
3
3
 
4
- #include <map>
5
- #include <set>
6
- #include <deque>
7
- #include <vector>
8
- #include <typeinfo>
9
- #include <iostream>
10
- #include <algorithm>
11
- #include <unordered_map>
12
- #include <unordered_set>
13
- #include "memory/SharedPtr.hpp"
4
+ // sass.hpp must go before all system headers to get the
5
+ // __EXTENSIONS__ fix on Solaris.
6
+ #include "sass.hpp"
7
+ #include "memory.hpp"
14
8
  #include "sass/functions.h"
15
9
 
16
10
  /////////////////////////////////////////////
@@ -18,11 +12,16 @@
18
12
  /////////////////////////////////////////////
19
13
  namespace Sass {
20
14
 
15
+ class SourceData;
16
+ class SourceFile;
17
+ class SynthFile;
18
+ class ItplFile;
19
+
21
20
  class AST_Node;
22
21
 
23
- class Has_Block;
22
+ class ParentStatement;
24
23
 
25
- class Simple_Selector;
24
+ class SimpleSelector;
26
25
 
27
26
  class Parent_Reference;
28
27
 
@@ -32,34 +31,36 @@ namespace Sass {
32
31
  class Statement;
33
32
  class Value;
34
33
  class Declaration;
35
- class Ruleset;
34
+ class StyleRule;
36
35
  class Bubble;
37
36
  class Trace;
38
37
 
39
- class Media_Block;
40
- class Supports_Block;
41
- class Directive;
38
+ class MediaRule;
39
+ class CssMediaRule;
40
+ class CssMediaQuery;
42
41
 
42
+ class SupportsRule;
43
+ class AtRule;
43
44
 
44
45
  class Keyframe_Rule;
45
- class At_Root_Block;
46
+ class AtRootRule;
46
47
  class Assignment;
47
48
 
48
49
  class Import;
49
50
  class Import_Stub;
50
- class Warning;
51
+ class WarningRule;
51
52
 
52
- class Error;
53
- class Debug;
53
+ class ErrorRule;
54
+ class DebugRule;
54
55
  class Comment;
55
56
 
56
57
  class If;
57
- class For;
58
- class Each;
59
- class While;
58
+ class ForRule;
59
+ class EachRule;
60
+ class WhileRule;
60
61
  class Return;
61
62
  class Content;
62
- class Extension;
63
+ class ExtendRule;
63
64
  class Definition;
64
65
 
65
66
  class List;
@@ -80,6 +81,7 @@ namespace Sass {
80
81
  class Color_HSLA;
81
82
  class Boolean;
82
83
  class String;
84
+ class Null;
83
85
 
84
86
  class String_Schema;
85
87
  class String_Constant;
@@ -87,17 +89,13 @@ namespace Sass {
87
89
 
88
90
  class Media_Query;
89
91
  class Media_Query_Expression;
90
- class Supports_Condition;
91
- class Supports_Operator;
92
- class Supports_Negation;
93
- class Supports_Declaration;
92
+ class SupportsCondition;
93
+ class SupportsOperation;
94
+ class SupportsNegation;
95
+ class SupportsDeclaration;
94
96
  class Supports_Interpolation;
95
-
96
-
97
- class Null;
98
-
97
+
99
98
  class At_Root_Query;
100
- class Parent_Selector;
101
99
  class Parameter;
102
100
  class Parameters;
103
101
  class Argument;
@@ -106,56 +104,69 @@ namespace Sass {
106
104
 
107
105
 
108
106
  class Selector_Schema;
109
- class Placeholder_Selector;
110
- class Type_Selector;
111
- class Class_Selector;
112
- class Id_Selector;
113
- class Attribute_Selector;
114
-
115
- class Pseudo_Selector;
116
- class Wrapped_Selector;
117
- class Compound_Selector;
118
- class Complex_Selector;
119
- class Selector_List;
120
-
107
+ class PlaceholderSelector;
108
+ class TypeSelector;
109
+ class ClassSelector;
110
+ class IDSelector;
111
+ class AttributeSelector;
112
+
113
+ class PseudoSelector;
114
+
115
+ class SelectorComponent;
116
+ class SelectorCombinator;
117
+ class CompoundSelector;
118
+ class ComplexSelector;
119
+ class SelectorList;
121
120
 
122
121
  // common classes
123
122
  class Context;
124
123
  class Expand;
125
124
  class Eval;
126
125
 
126
+ class Extension;
127
+
127
128
  // declare classes that are instances of memory nodes
128
- // #define IMPL_MEM_OBJ(type) using type##_Obj = SharedImpl<type>
129
- #define IMPL_MEM_OBJ(type) typedef SharedImpl<type> type##_Obj
129
+ // Note: also add a mapping without underscore
130
+ // ToDo: move to camelCase vars in the future
131
+ #define IMPL_MEM_OBJ(type) \
132
+ typedef SharedImpl<type> type##Obj; \
133
+ typedef SharedImpl<type> type##_Obj; \
134
+
135
+ IMPL_MEM_OBJ(SourceData);
136
+ IMPL_MEM_OBJ(SourceFile);
137
+ IMPL_MEM_OBJ(SynthFile);
138
+ IMPL_MEM_OBJ(ItplFile);
130
139
 
131
140
  IMPL_MEM_OBJ(AST_Node);
132
141
  IMPL_MEM_OBJ(Statement);
133
142
  IMPL_MEM_OBJ(Block);
134
- IMPL_MEM_OBJ(Ruleset);
143
+ IMPL_MEM_OBJ(StyleRule);
135
144
  IMPL_MEM_OBJ(Bubble);
136
145
  IMPL_MEM_OBJ(Trace);
137
- IMPL_MEM_OBJ(Media_Block);
138
- IMPL_MEM_OBJ(Supports_Block);
139
- IMPL_MEM_OBJ(Directive);
146
+ IMPL_MEM_OBJ(MediaRule);
147
+ IMPL_MEM_OBJ(CssMediaRule);
148
+ IMPL_MEM_OBJ(CssMediaQuery);
149
+ IMPL_MEM_OBJ(SupportsRule);
150
+ IMPL_MEM_OBJ(AtRule);
140
151
  IMPL_MEM_OBJ(Keyframe_Rule);
141
- IMPL_MEM_OBJ(At_Root_Block);
152
+ IMPL_MEM_OBJ(AtRootRule);
142
153
  IMPL_MEM_OBJ(Declaration);
143
154
  IMPL_MEM_OBJ(Assignment);
144
155
  IMPL_MEM_OBJ(Import);
145
156
  IMPL_MEM_OBJ(Import_Stub);
146
- IMPL_MEM_OBJ(Warning);
147
- IMPL_MEM_OBJ(Error);
148
- IMPL_MEM_OBJ(Debug);
157
+ IMPL_MEM_OBJ(WarningRule);
158
+ IMPL_MEM_OBJ(ErrorRule);
159
+ IMPL_MEM_OBJ(DebugRule);
149
160
  IMPL_MEM_OBJ(Comment);
150
161
  IMPL_MEM_OBJ(PreValue);
151
- IMPL_MEM_OBJ(Has_Block);
162
+ IMPL_MEM_OBJ(ParentStatement);
152
163
  IMPL_MEM_OBJ(If);
153
- IMPL_MEM_OBJ(For);
154
- IMPL_MEM_OBJ(Each);
155
- IMPL_MEM_OBJ(While);
164
+ IMPL_MEM_OBJ(ForRule);
165
+ IMPL_MEM_OBJ(EachRule);
166
+ IMPL_MEM_OBJ(WhileRule);
156
167
  IMPL_MEM_OBJ(Return);
157
168
  IMPL_MEM_OBJ(Content);
158
- IMPL_MEM_OBJ(Extension);
169
+ IMPL_MEM_OBJ(ExtendRule);
159
170
  IMPL_MEM_OBJ(Definition);
160
171
  IMPL_MEM_OBJ(Mixin_Call);
161
172
  IMPL_MEM_OBJ(Value);
@@ -180,14 +191,13 @@ namespace Sass {
180
191
  IMPL_MEM_OBJ(String_Quoted);
181
192
  IMPL_MEM_OBJ(Media_Query);
182
193
  IMPL_MEM_OBJ(Media_Query_Expression);
183
- IMPL_MEM_OBJ(Supports_Condition);
184
- IMPL_MEM_OBJ(Supports_Operator);
185
- IMPL_MEM_OBJ(Supports_Negation);
186
- IMPL_MEM_OBJ(Supports_Declaration);
194
+ IMPL_MEM_OBJ(SupportsCondition);
195
+ IMPL_MEM_OBJ(SupportsOperation);
196
+ IMPL_MEM_OBJ(SupportsNegation);
197
+ IMPL_MEM_OBJ(SupportsDeclaration);
187
198
  IMPL_MEM_OBJ(Supports_Interpolation);
188
199
  IMPL_MEM_OBJ(At_Root_Query);
189
200
  IMPL_MEM_OBJ(Null);
190
- IMPL_MEM_OBJ(Parent_Selector);
191
201
  IMPL_MEM_OBJ(Parent_Reference);
192
202
  IMPL_MEM_OBJ(Parameter);
193
203
  IMPL_MEM_OBJ(Parameters);
@@ -195,108 +205,30 @@ namespace Sass {
195
205
  IMPL_MEM_OBJ(Arguments);
196
206
  IMPL_MEM_OBJ(Selector);
197
207
  IMPL_MEM_OBJ(Selector_Schema);
198
- IMPL_MEM_OBJ(Simple_Selector);
199
- IMPL_MEM_OBJ(Placeholder_Selector);
200
- IMPL_MEM_OBJ(Type_Selector);
201
- IMPL_MEM_OBJ(Class_Selector);
202
- IMPL_MEM_OBJ(Id_Selector);
203
- IMPL_MEM_OBJ(Attribute_Selector);
204
- IMPL_MEM_OBJ(Pseudo_Selector);
205
- IMPL_MEM_OBJ(Wrapped_Selector);
206
- IMPL_MEM_OBJ(Compound_Selector);
207
- IMPL_MEM_OBJ(Complex_Selector);
208
- IMPL_MEM_OBJ(Selector_List);
209
-
210
- // ###########################################################################
211
- // Implement compare, order and hashing operations for AST Nodes
212
- // ###########################################################################
213
-
214
- struct HashNodes {
215
- template <class T>
216
- size_t operator() (const T& ex) const {
217
- return ex.isNull() ? 0 : ex->hash();
218
- }
219
- };
220
- template <class T>
221
- bool OrderFunction(const T& lhs, const T& rhs) {
222
- return !lhs.isNull() && !rhs.isNull() && *lhs < *rhs;
223
- };
224
- struct OrderNodes {
225
- template <class T>
226
- bool operator() (const T& lhs, const T& rhs) const {
227
- return OrderFunction<T>(lhs, rhs);
228
- }
229
- };
230
- template <class T>
231
- bool CompareFunction(const T& lhs, const T& rhs) {
232
- // code around sass logic issue. 1px == 1 is true
233
- // but both items are still different keys in maps
234
- if (dynamic_cast<Number*>(lhs.ptr()))
235
- if (dynamic_cast<Number*>(rhs.ptr()))
236
- return lhs->hash() == rhs->hash();
237
- return !lhs.isNull() && !rhs.isNull() && *lhs == *rhs;
238
- }
239
- struct CompareNodes {
240
- template <class T>
241
- bool operator() (const T& lhs, const T& rhs) const {
242
- return CompareFunction<T>(lhs, rhs);
243
- }
244
- };
245
-
246
- struct HashPtr {
247
- template <class T>
248
- size_t operator() (const T *ref) const {
249
- return ref->hash();
250
- }
251
- };
252
- struct ComparePtrs {
253
- template <class T>
254
- bool operator() (const T *lhs, const T *rhs) const {
255
- return *lhs == *rhs;
256
- }
257
- };
208
+ IMPL_MEM_OBJ(SimpleSelector);
209
+ IMPL_MEM_OBJ(PlaceholderSelector);
210
+ IMPL_MEM_OBJ(TypeSelector);
211
+ IMPL_MEM_OBJ(ClassSelector);
212
+ IMPL_MEM_OBJ(IDSelector);
213
+ IMPL_MEM_OBJ(AttributeSelector);
214
+ IMPL_MEM_OBJ(PseudoSelector);
215
+
216
+ IMPL_MEM_OBJ(SelectorComponent);
217
+ IMPL_MEM_OBJ(SelectorCombinator);
218
+ IMPL_MEM_OBJ(CompoundSelector);
219
+ IMPL_MEM_OBJ(ComplexSelector);
220
+ IMPL_MEM_OBJ(SelectorList);
258
221
 
259
222
  // ###########################################################################
260
223
  // some often used typedefs
261
224
  // ###########################################################################
262
225
 
263
- typedef std::unordered_map<
264
- Expression_Obj, // key
265
- Expression_Obj, // value
266
- HashNodes, // hasher
267
- CompareNodes // compare
268
- > ExpressionMap;
269
- typedef std::unordered_set<
270
- Expression_Obj, // value
271
- HashNodes, // hasher
272
- CompareNodes // compare
273
- > ExpressionSet;
274
-
275
- typedef std::string SubSetMapKey;
276
- typedef std::vector<std::string> SubSetMapKeys;
277
-
278
- typedef std::pair<Complex_Selector_Obj, Compound_Selector_Obj> SubSetMapPair;
279
- typedef std::pair<Compound_Selector_Obj, Complex_Selector_Obj> SubSetMapLookup;
280
- typedef std::vector<SubSetMapPair> SubSetMapPairs;
281
- typedef std::vector<SubSetMapLookup> SubSetMapLookups;
282
-
283
- typedef std::pair<Complex_Selector_Obj, SubSetMapPairs> SubSetMapResult;
284
- typedef std::vector<SubSetMapResult> SubSetMapResults;
285
-
286
- typedef std::set<Selector_Obj, OrderNodes> SelectorSet;
287
-
288
- typedef std::deque<Complex_Selector_Obj> ComplexSelectorDeque;
289
- typedef std::set<Simple_Selector_Obj, OrderNodes> SimpleSelectorSet;
290
- typedef std::set<Complex_Selector_Obj, OrderNodes> ComplexSelectorSet;
291
- typedef std::set<Compound_Selector_Obj, OrderNodes> CompoundSelectorSet;
292
- typedef std::unordered_set<Simple_Selector_Obj, HashNodes, CompareNodes> SimpleSelectorDict;
293
-
294
- typedef std::vector<Block*> BlockStack;
295
- typedef std::vector<Sass_Callee> CalleeStack;
296
- typedef std::vector<AST_Node_Obj> CallStack;
297
- typedef std::vector<Media_Block*> MediaStack;
298
- typedef std::vector<Selector_List_Obj> SelectorStack;
299
- typedef std::vector<Sass_Import_Entry> ImporterStack;
226
+ typedef sass::vector<Block*> BlockStack;
227
+ typedef sass::vector<Sass_Callee> CalleeStack;
228
+ typedef sass::vector<AST_Node_Obj> CallStack;
229
+ typedef sass::vector<CssMediaRuleObj> MediaStack;
230
+ typedef sass::vector<SelectorListObj> SelectorStack;
231
+ typedef sass::vector<Sass_Import_Entry> ImporterStack;
300
232
 
301
233
  // only to switch implementations for testing
302
234
  #define environment_map std::map
@@ -325,16 +257,17 @@ namespace Sass {
325
257
  DECLARE_BASE_CAST(AST_Node)
326
258
  DECLARE_BASE_CAST(Expression)
327
259
  DECLARE_BASE_CAST(Statement)
328
- DECLARE_BASE_CAST(Has_Block)
260
+ DECLARE_BASE_CAST(ParentStatement)
329
261
  DECLARE_BASE_CAST(PreValue)
330
262
  DECLARE_BASE_CAST(Value)
331
263
  DECLARE_BASE_CAST(List)
332
264
  DECLARE_BASE_CAST(Color)
333
265
  DECLARE_BASE_CAST(String)
334
266
  DECLARE_BASE_CAST(String_Constant)
335
- DECLARE_BASE_CAST(Supports_Condition)
267
+ DECLARE_BASE_CAST(SupportsCondition)
336
268
  DECLARE_BASE_CAST(Selector)
337
- DECLARE_BASE_CAST(Simple_Selector)
269
+ DECLARE_BASE_CAST(SimpleSelector)
270
+ DECLARE_BASE_CAST(SelectorComponent)
338
271
 
339
272
  }
340
273