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
@@ -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