sassc 2.0.0 → 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 (260) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.gitmodules +1 -1
  4. data/.travis.yml +9 -3
  5. data/CHANGELOG.md +36 -0
  6. data/CODE_OF_CONDUCT.md +1 -1
  7. data/README.md +1 -1
  8. data/Rakefile +43 -7
  9. data/ext/depend +4 -0
  10. data/ext/extconf.rb +92 -0
  11. data/ext/libsass/VERSION +1 -0
  12. data/ext/libsass/include/sass/base.h +9 -1
  13. data/ext/libsass/include/sass/context.h +5 -1
  14. data/ext/libsass/src/MurmurHash2.hpp +91 -0
  15. data/ext/libsass/src/ast.cpp +755 -2028
  16. data/ext/libsass/src/ast.hpp +492 -2477
  17. data/ext/libsass/src/{to_c.cpp → ast2c.cpp} +22 -16
  18. data/ext/libsass/src/ast2c.hpp +39 -0
  19. data/ext/libsass/src/ast_def_macros.hpp +70 -10
  20. data/ext/libsass/src/ast_fwd_decl.cpp +5 -3
  21. data/ext/libsass/src/ast_fwd_decl.hpp +107 -296
  22. data/ext/libsass/src/ast_helpers.hpp +292 -0
  23. data/ext/libsass/src/ast_sel_cmp.cpp +396 -0
  24. data/ext/libsass/src/ast_sel_super.cpp +539 -0
  25. data/ext/libsass/src/ast_sel_unify.cpp +275 -0
  26. data/ext/libsass/src/ast_sel_weave.cpp +616 -0
  27. data/ext/libsass/src/ast_selectors.cpp +1043 -0
  28. data/ext/libsass/src/ast_selectors.hpp +522 -0
  29. data/ext/libsass/src/ast_supports.cpp +114 -0
  30. data/ext/libsass/src/ast_supports.hpp +121 -0
  31. data/ext/libsass/src/ast_values.cpp +1154 -0
  32. data/ext/libsass/src/ast_values.hpp +498 -0
  33. data/ext/libsass/src/backtrace.cpp +11 -7
  34. data/ext/libsass/src/backtrace.hpp +5 -5
  35. data/ext/libsass/src/base64vlq.cpp +5 -2
  36. data/ext/libsass/src/base64vlq.hpp +1 -1
  37. data/ext/libsass/src/bind.cpp +35 -34
  38. data/ext/libsass/src/bind.hpp +3 -1
  39. data/ext/libsass/src/c2ast.cpp +64 -0
  40. data/ext/libsass/src/c2ast.hpp +14 -0
  41. data/ext/libsass/src/cencode.c +4 -6
  42. data/ext/libsass/src/check_nesting.cpp +83 -88
  43. data/ext/libsass/src/check_nesting.hpp +39 -34
  44. data/ext/libsass/src/color_maps.cpp +168 -164
  45. data/ext/libsass/src/color_maps.hpp +152 -160
  46. data/ext/libsass/src/constants.cpp +20 -0
  47. data/ext/libsass/src/constants.hpp +19 -0
  48. data/ext/libsass/src/context.cpp +104 -121
  49. data/ext/libsass/src/context.hpp +43 -55
  50. data/ext/libsass/src/cssize.cpp +103 -188
  51. data/ext/libsass/src/cssize.hpp +45 -51
  52. data/ext/libsass/src/dart_helpers.hpp +199 -0
  53. data/ext/libsass/src/debugger.hpp +524 -361
  54. data/ext/libsass/src/emitter.cpp +26 -26
  55. data/ext/libsass/src/emitter.hpp +20 -18
  56. data/ext/libsass/src/environment.cpp +41 -27
  57. data/ext/libsass/src/environment.hpp +33 -22
  58. data/ext/libsass/src/error_handling.cpp +92 -94
  59. data/ext/libsass/src/error_handling.hpp +73 -50
  60. data/ext/libsass/src/eval.cpp +380 -515
  61. data/ext/libsass/src/eval.hpp +64 -57
  62. data/ext/libsass/src/eval_selectors.cpp +75 -0
  63. data/ext/libsass/src/expand.cpp +322 -263
  64. data/ext/libsass/src/expand.hpp +55 -39
  65. data/ext/libsass/src/extender.cpp +1188 -0
  66. data/ext/libsass/src/extender.hpp +399 -0
  67. data/ext/libsass/src/extension.cpp +43 -0
  68. data/ext/libsass/src/extension.hpp +89 -0
  69. data/ext/libsass/src/file.cpp +134 -88
  70. data/ext/libsass/src/file.hpp +28 -37
  71. data/ext/libsass/src/fn_colors.cpp +596 -0
  72. data/ext/libsass/src/fn_colors.hpp +85 -0
  73. data/ext/libsass/src/fn_lists.cpp +285 -0
  74. data/ext/libsass/src/fn_lists.hpp +34 -0
  75. data/ext/libsass/src/fn_maps.cpp +94 -0
  76. data/ext/libsass/src/fn_maps.hpp +30 -0
  77. data/ext/libsass/src/fn_miscs.cpp +244 -0
  78. data/ext/libsass/src/fn_miscs.hpp +40 -0
  79. data/ext/libsass/src/fn_numbers.cpp +227 -0
  80. data/ext/libsass/src/fn_numbers.hpp +45 -0
  81. data/ext/libsass/src/fn_selectors.cpp +205 -0
  82. data/ext/libsass/src/fn_selectors.hpp +35 -0
  83. data/ext/libsass/src/fn_strings.cpp +268 -0
  84. data/ext/libsass/src/fn_strings.hpp +34 -0
  85. data/ext/libsass/src/fn_utils.cpp +158 -0
  86. data/ext/libsass/src/fn_utils.hpp +62 -0
  87. data/ext/libsass/src/inspect.cpp +253 -266
  88. data/ext/libsass/src/inspect.hpp +72 -74
  89. data/ext/libsass/src/json.cpp +2 -2
  90. data/ext/libsass/src/lexer.cpp +25 -84
  91. data/ext/libsass/src/lexer.hpp +5 -16
  92. data/ext/libsass/src/listize.cpp +27 -43
  93. data/ext/libsass/src/listize.hpp +14 -11
  94. data/ext/libsass/src/mapping.hpp +1 -0
  95. data/ext/libsass/src/memory.hpp +12 -0
  96. data/ext/libsass/src/memory/allocator.cpp +48 -0
  97. data/ext/libsass/src/memory/allocator.hpp +138 -0
  98. data/ext/libsass/src/memory/config.hpp +20 -0
  99. data/ext/libsass/src/memory/memory_pool.hpp +186 -0
  100. data/ext/libsass/src/memory/shared_ptr.cpp +33 -0
  101. data/ext/libsass/src/memory/shared_ptr.hpp +332 -0
  102. data/ext/libsass/src/operation.hpp +193 -143
  103. data/ext/libsass/src/operators.cpp +56 -29
  104. data/ext/libsass/src/operators.hpp +11 -11
  105. data/ext/libsass/src/ordered_map.hpp +112 -0
  106. data/ext/libsass/src/output.cpp +59 -75
  107. data/ext/libsass/src/output.hpp +15 -22
  108. data/ext/libsass/src/parser.cpp +662 -818
  109. data/ext/libsass/src/parser.hpp +96 -100
  110. data/ext/libsass/src/parser_selectors.cpp +189 -0
  111. data/ext/libsass/src/permutate.hpp +164 -0
  112. data/ext/libsass/src/plugins.cpp +12 -8
  113. data/ext/libsass/src/plugins.hpp +8 -8
  114. data/ext/libsass/src/position.cpp +10 -26
  115. data/ext/libsass/src/position.hpp +44 -21
  116. data/ext/libsass/src/prelexer.cpp +14 -8
  117. data/ext/libsass/src/prelexer.hpp +9 -9
  118. data/ext/libsass/src/remove_placeholders.cpp +59 -57
  119. data/ext/libsass/src/remove_placeholders.hpp +20 -18
  120. data/ext/libsass/src/sass.cpp +25 -18
  121. data/ext/libsass/src/sass.hpp +22 -14
  122. data/ext/libsass/src/sass2scss.cpp +49 -18
  123. data/ext/libsass/src/sass_context.cpp +104 -132
  124. data/ext/libsass/src/sass_context.hpp +2 -2
  125. data/ext/libsass/src/sass_functions.cpp +7 -4
  126. data/ext/libsass/src/sass_functions.hpp +1 -1
  127. data/ext/libsass/src/sass_values.cpp +26 -21
  128. data/ext/libsass/src/settings.hpp +19 -0
  129. data/ext/libsass/src/source.cpp +69 -0
  130. data/ext/libsass/src/source.hpp +95 -0
  131. data/ext/libsass/src/source_data.hpp +32 -0
  132. data/ext/libsass/src/source_map.cpp +27 -20
  133. data/ext/libsass/src/source_map.hpp +14 -11
  134. data/ext/libsass/src/stylesheet.cpp +22 -0
  135. data/ext/libsass/src/stylesheet.hpp +57 -0
  136. data/ext/libsass/src/to_value.cpp +24 -22
  137. data/ext/libsass/src/to_value.hpp +18 -22
  138. data/ext/libsass/src/units.cpp +28 -22
  139. data/ext/libsass/src/units.hpp +9 -8
  140. data/ext/libsass/src/utf8/checked.h +12 -10
  141. data/ext/libsass/src/utf8/core.h +3 -0
  142. data/ext/libsass/src/utf8_string.cpp +12 -10
  143. data/ext/libsass/src/utf8_string.hpp +7 -6
  144. data/ext/libsass/src/util.cpp +97 -107
  145. data/ext/libsass/src/util.hpp +74 -30
  146. data/ext/libsass/src/util_string.cpp +125 -0
  147. data/ext/libsass/src/util_string.hpp +73 -0
  148. data/ext/libsass/src/values.cpp +33 -24
  149. data/ext/libsass/src/values.hpp +2 -2
  150. data/lib/sassc.rb +24 -0
  151. data/lib/sassc/engine.rb +7 -5
  152. data/lib/sassc/functions_handler.rb +11 -13
  153. data/lib/sassc/native.rb +10 -9
  154. data/lib/sassc/native/native_functions_api.rb +0 -5
  155. data/lib/sassc/script.rb +4 -6
  156. data/lib/sassc/version.rb +1 -1
  157. data/sassc.gemspec +32 -12
  158. data/test/engine_test.rb +32 -2
  159. data/test/functions_test.rb +38 -1
  160. data/test/native_test.rb +4 -4
  161. metadata +95 -109
  162. data/ext/Rakefile +0 -3
  163. data/ext/libsass/.editorconfig +0 -15
  164. data/ext/libsass/.gitattributes +0 -2
  165. data/ext/libsass/.github/CONTRIBUTING.md +0 -65
  166. data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
  167. data/ext/libsass/.gitignore +0 -85
  168. data/ext/libsass/.travis.yml +0 -64
  169. data/ext/libsass/COPYING +0 -25
  170. data/ext/libsass/GNUmakefile.am +0 -88
  171. data/ext/libsass/INSTALL +0 -1
  172. data/ext/libsass/LICENSE +0 -25
  173. data/ext/libsass/Makefile +0 -351
  174. data/ext/libsass/Makefile.conf +0 -55
  175. data/ext/libsass/Readme.md +0 -104
  176. data/ext/libsass/SECURITY.md +0 -10
  177. data/ext/libsass/appveyor.yml +0 -91
  178. data/ext/libsass/configure.ac +0 -138
  179. data/ext/libsass/contrib/libsass.spec +0 -66
  180. data/ext/libsass/docs/README.md +0 -20
  181. data/ext/libsass/docs/api-context-example.md +0 -45
  182. data/ext/libsass/docs/api-context-internal.md +0 -163
  183. data/ext/libsass/docs/api-context.md +0 -295
  184. data/ext/libsass/docs/api-doc.md +0 -215
  185. data/ext/libsass/docs/api-function-example.md +0 -67
  186. data/ext/libsass/docs/api-function-internal.md +0 -8
  187. data/ext/libsass/docs/api-function.md +0 -74
  188. data/ext/libsass/docs/api-importer-example.md +0 -112
  189. data/ext/libsass/docs/api-importer-internal.md +0 -20
  190. data/ext/libsass/docs/api-importer.md +0 -86
  191. data/ext/libsass/docs/api-value-example.md +0 -55
  192. data/ext/libsass/docs/api-value-internal.md +0 -76
  193. data/ext/libsass/docs/api-value.md +0 -154
  194. data/ext/libsass/docs/build-on-darwin.md +0 -27
  195. data/ext/libsass/docs/build-on-gentoo.md +0 -55
  196. data/ext/libsass/docs/build-on-windows.md +0 -139
  197. data/ext/libsass/docs/build-shared-library.md +0 -35
  198. data/ext/libsass/docs/build-with-autotools.md +0 -78
  199. data/ext/libsass/docs/build-with-makefiles.md +0 -68
  200. data/ext/libsass/docs/build-with-mingw.md +0 -107
  201. data/ext/libsass/docs/build-with-visual-studio.md +0 -90
  202. data/ext/libsass/docs/build.md +0 -97
  203. data/ext/libsass/docs/compatibility-plan.md +0 -48
  204. data/ext/libsass/docs/contributing.md +0 -17
  205. data/ext/libsass/docs/custom-functions-internal.md +0 -122
  206. data/ext/libsass/docs/dev-ast-memory.md +0 -223
  207. data/ext/libsass/docs/implementations.md +0 -56
  208. data/ext/libsass/docs/plugins.md +0 -47
  209. data/ext/libsass/docs/setup-environment.md +0 -68
  210. data/ext/libsass/docs/source-map-internals.md +0 -51
  211. data/ext/libsass/docs/trace.md +0 -26
  212. data/ext/libsass/docs/triage.md +0 -17
  213. data/ext/libsass/docs/unicode.md +0 -39
  214. data/ext/libsass/extconf.rb +0 -6
  215. data/ext/libsass/include/sass/version.h.in +0 -12
  216. data/ext/libsass/m4/.gitkeep +0 -0
  217. data/ext/libsass/m4/m4-ax_cxx_compile_stdcxx_11.m4 +0 -167
  218. data/ext/libsass/res/resource.rc +0 -35
  219. data/ext/libsass/script/bootstrap +0 -13
  220. data/ext/libsass/script/branding +0 -10
  221. data/ext/libsass/script/ci-build-libsass +0 -134
  222. data/ext/libsass/script/ci-build-plugin +0 -62
  223. data/ext/libsass/script/ci-install-compiler +0 -6
  224. data/ext/libsass/script/ci-install-deps +0 -20
  225. data/ext/libsass/script/ci-report-coverage +0 -42
  226. data/ext/libsass/script/spec +0 -5
  227. data/ext/libsass/script/tap-driver +0 -652
  228. data/ext/libsass/script/tap-runner +0 -1
  229. data/ext/libsass/script/test-leaks.pl +0 -103
  230. data/ext/libsass/src/GNUmakefile.am +0 -54
  231. data/ext/libsass/src/extend.cpp +0 -2130
  232. data/ext/libsass/src/extend.hpp +0 -86
  233. data/ext/libsass/src/functions.cpp +0 -2234
  234. data/ext/libsass/src/functions.hpp +0 -198
  235. data/ext/libsass/src/memory/SharedPtr.cpp +0 -114
  236. data/ext/libsass/src/memory/SharedPtr.hpp +0 -206
  237. data/ext/libsass/src/node.cpp +0 -319
  238. data/ext/libsass/src/node.hpp +0 -118
  239. data/ext/libsass/src/paths.hpp +0 -71
  240. data/ext/libsass/src/sass_util.cpp +0 -149
  241. data/ext/libsass/src/sass_util.hpp +0 -256
  242. data/ext/libsass/src/subset_map.cpp +0 -55
  243. data/ext/libsass/src/subset_map.hpp +0 -76
  244. data/ext/libsass/src/support/libsass.pc.in +0 -11
  245. data/ext/libsass/src/to_c.hpp +0 -39
  246. data/ext/libsass/test/test_node.cpp +0 -94
  247. data/ext/libsass/test/test_paths.cpp +0 -28
  248. data/ext/libsass/test/test_selector_difference.cpp +0 -25
  249. data/ext/libsass/test/test_specificity.cpp +0 -25
  250. data/ext/libsass/test/test_subset_map.cpp +0 -472
  251. data/ext/libsass/test/test_superselector.cpp +0 -69
  252. data/ext/libsass/test/test_unification.cpp +0 -31
  253. data/ext/libsass/version.sh +0 -10
  254. data/ext/libsass/win/libsass.sln +0 -39
  255. data/ext/libsass/win/libsass.sln.DotSettings +0 -9
  256. data/ext/libsass/win/libsass.targets +0 -118
  257. data/ext/libsass/win/libsass.vcxproj +0 -188
  258. data/ext/libsass/win/libsass.vcxproj.filters +0 -357
  259. data/lib/sassc/native/lib_c.rb +0 -21
  260. data/lib/tasks/libsass.rb +0 -33
@@ -1,28 +1,34 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
1
3
  #include "sass.hpp"
2
- #include "to_c.hpp"
4
+
5
+ #include "ast2c.hpp"
3
6
  #include "ast.hpp"
4
7
 
5
8
  namespace Sass {
6
9
 
7
- union Sass_Value* To_C::fallback_impl(AST_Node_Ptr n)
8
- { return sass_make_error("unknown type for C-API"); }
9
-
10
- union Sass_Value* To_C::operator()(Boolean_Ptr b)
10
+ union Sass_Value* AST2C::operator()(Boolean* b)
11
11
  { return sass_make_boolean(b->value()); }
12
12
 
13
- union Sass_Value* To_C::operator()(Number_Ptr n)
13
+ union Sass_Value* AST2C::operator()(Number* n)
14
14
  { return sass_make_number(n->value(), n->unit().c_str()); }
15
15
 
16
- union Sass_Value* To_C::operator()(Custom_Warning_Ptr w)
16
+ union Sass_Value* AST2C::operator()(Custom_Warning* w)
17
17
  { return sass_make_warning(w->message().c_str()); }
18
18
 
19
- union Sass_Value* To_C::operator()(Custom_Error_Ptr e)
19
+ union Sass_Value* AST2C::operator()(Custom_Error* e)
20
20
  { return sass_make_error(e->message().c_str()); }
21
21
 
22
- union Sass_Value* To_C::operator()(Color_Ptr c)
22
+ union Sass_Value* AST2C::operator()(Color_RGBA* c)
23
23
  { return sass_make_color(c->r(), c->g(), c->b(), c->a()); }
24
24
 
25
- union Sass_Value* To_C::operator()(String_Constant_Ptr s)
25
+ union Sass_Value* AST2C::operator()(Color_HSLA* c)
26
+ {
27
+ Color_RGBA_Obj rgba = c->copyAsRGBA();
28
+ return operator()(rgba.ptr());
29
+ }
30
+
31
+ union Sass_Value* AST2C::operator()(String_Constant* s)
26
32
  {
27
33
  if (s->quote_mark()) {
28
34
  return sass_make_qstring(s->value().c_str());
@@ -31,10 +37,10 @@ namespace Sass {
31
37
  }
32
38
  }
33
39
 
34
- union Sass_Value* To_C::operator()(String_Quoted_Ptr s)
40
+ union Sass_Value* AST2C::operator()(String_Quoted* s)
35
41
  { return sass_make_qstring(s->value().c_str()); }
36
42
 
37
- union Sass_Value* To_C::operator()(List_Ptr l)
43
+ union Sass_Value* AST2C::operator()(List* l)
38
44
  {
39
45
  union Sass_Value* v = sass_make_list(l->length(), l->separator(), l->is_bracketed());
40
46
  for (size_t i = 0, L = l->length(); i < L; ++i) {
@@ -43,7 +49,7 @@ namespace Sass {
43
49
  return v;
44
50
  }
45
51
 
46
- union Sass_Value* To_C::operator()(Map_Ptr m)
52
+ union Sass_Value* AST2C::operator()(Map* m)
47
53
  {
48
54
  union Sass_Value* v = sass_make_map(m->length());
49
55
  int i = 0;
@@ -55,7 +61,7 @@ namespace Sass {
55
61
  return v;
56
62
  }
57
63
 
58
- union Sass_Value* To_C::operator()(Arguments_Ptr a)
64
+ union Sass_Value* AST2C::operator()(Arguments* a)
59
65
  {
60
66
  union Sass_Value* v = sass_make_list(a->length(), SASS_COMMA, false);
61
67
  for (size_t i = 0, L = a->length(); i < L; ++i) {
@@ -64,11 +70,11 @@ namespace Sass {
64
70
  return v;
65
71
  }
66
72
 
67
- union Sass_Value* To_C::operator()(Argument_Ptr a)
73
+ union Sass_Value* AST2C::operator()(Argument* a)
68
74
  { return a->value()->perform(this); }
69
75
 
70
76
  // not strictly necessary because of the fallback
71
- union Sass_Value* To_C::operator()(Null_Ptr n)
77
+ union Sass_Value* AST2C::operator()(Null* n)
72
78
  { return sass_make_null(); }
73
79
 
74
80
  };
@@ -0,0 +1,39 @@
1
+ #ifndef SASS_AST2C_H
2
+ #define SASS_AST2C_H
3
+
4
+ #include "ast_fwd_decl.hpp"
5
+ #include "operation.hpp"
6
+ #include "sass/values.h"
7
+
8
+ namespace Sass {
9
+
10
+ class AST2C : public Operation_CRTP<union Sass_Value*, AST2C> {
11
+
12
+ public:
13
+
14
+ AST2C() { }
15
+ ~AST2C() { }
16
+
17
+ union Sass_Value* operator()(Boolean*);
18
+ union Sass_Value* operator()(Number*);
19
+ union Sass_Value* operator()(Color_RGBA*);
20
+ union Sass_Value* operator()(Color_HSLA*);
21
+ union Sass_Value* operator()(String_Constant*);
22
+ union Sass_Value* operator()(String_Quoted*);
23
+ union Sass_Value* operator()(Custom_Warning*);
24
+ union Sass_Value* operator()(Custom_Error*);
25
+ union Sass_Value* operator()(List*);
26
+ union Sass_Value* operator()(Map*);
27
+ union Sass_Value* operator()(Null*);
28
+ union Sass_Value* operator()(Arguments*);
29
+ union Sass_Value* operator()(Argument*);
30
+
31
+ // return sass error if type is not supported
32
+ union Sass_Value* fallback(AST_Node* x)
33
+ { return sass_make_error("unknown type for C-API"); }
34
+
35
+ };
36
+
37
+ }
38
+
39
+ #endif
@@ -35,16 +35,6 @@ class LocalOption {
35
35
  LocalOption<size_t> cnt_##name(name, name + 1); \
36
36
  if (name > MAX_NESTING) throw Exception::NestingLimitError(pstate, traces); \
37
37
 
38
- #define ATTACH_OPERATIONS()\
39
- virtual void perform(Operation<void>* op) { (*op)(this); }\
40
- virtual AST_Node_Ptr perform(Operation<AST_Node_Ptr>* op) { return (*op)(this); }\
41
- virtual Statement_Ptr perform(Operation<Statement_Ptr>* op) { return (*op)(this); }\
42
- virtual Expression_Ptr perform(Operation<Expression_Ptr>* op) { return (*op)(this); }\
43
- virtual Selector_Ptr perform(Operation<Selector_Ptr>* op) { return (*op)(this); }\
44
- virtual std::string perform(Operation<std::string>* op) { return (*op)(this); }\
45
- virtual union Sass_Value* perform(Operation<union Sass_Value*>* op) { return (*op)(this); }\
46
- virtual Value_Ptr perform(Operation<Value_Ptr>* op) { return (*op)(this); }
47
-
48
38
  #define ADD_PROPERTY(type, name)\
49
39
  protected:\
50
40
  type name##_;\
@@ -77,4 +67,74 @@ public: \
77
67
  void name(type name##__) { hash_ = 0; name##_ = name##__; } \
78
68
  private:
79
69
 
70
+ #ifdef DEBUG_SHARED_PTR
71
+
72
+ #define ATTACH_ABSTRACT_AST_OPERATIONS(klass) \
73
+ virtual klass* copy(sass::string, size_t) const = 0; \
74
+ virtual klass* clone(sass::string, size_t) const = 0; \
75
+
76
+ #define ATTACH_VIRTUAL_AST_OPERATIONS(klass) \
77
+ klass(const klass* ptr); \
78
+ virtual klass* copy(sass::string, size_t) const override = 0; \
79
+ virtual klass* clone(sass::string, size_t) const override = 0; \
80
+
81
+ #define ATTACH_AST_OPERATIONS(klass) \
82
+ klass(const klass* ptr); \
83
+ virtual klass* copy(sass::string, size_t) const override; \
84
+ virtual klass* clone(sass::string, size_t) const override; \
85
+
86
+ #else
87
+
88
+ #define ATTACH_ABSTRACT_AST_OPERATIONS(klass) \
89
+ virtual klass* copy() const = 0; \
90
+ virtual klass* clone() const = 0; \
91
+
92
+ #define ATTACH_VIRTUAL_AST_OPERATIONS(klass) \
93
+ klass(const klass* ptr); \
94
+ virtual klass* copy() const override = 0; \
95
+ virtual klass* clone() const override = 0; \
96
+
97
+ #define ATTACH_AST_OPERATIONS(klass) \
98
+ klass(const klass* ptr); \
99
+ virtual klass* copy() const override; \
100
+ virtual klass* clone() const override; \
101
+
102
+ #endif
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
+
112
+ #ifdef DEBUG_SHARED_PTR
113
+
114
+ #define IMPLEMENT_AST_OPERATORS(klass) \
115
+ klass* klass::copy(sass::string file, size_t line) const { \
116
+ klass* cpy = SASS_MEMORY_NEW(klass, this); \
117
+ cpy->trace(file, line); \
118
+ return cpy; \
119
+ } \
120
+ klass* klass::clone(sass::string file, size_t line) const { \
121
+ klass* cpy = copy(file, line); \
122
+ cpy->cloneChildren(); \
123
+ return cpy; \
124
+ } \
125
+
126
+ #else
127
+
128
+ #define IMPLEMENT_AST_OPERATORS(klass) \
129
+ klass* klass::copy() const { \
130
+ return SASS_MEMORY_NEW(klass, this); \
131
+ } \
132
+ klass* klass::clone() const { \
133
+ klass* cpy = copy(); \
134
+ cpy->cloneChildren(); \
135
+ return cpy; \
136
+ } \
137
+
138
+ #endif
139
+
80
140
  #endif
@@ -16,14 +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
+ IMPLEMENT_BASE_CAST(Color)
22
23
  IMPLEMENT_BASE_CAST(List)
23
24
  IMPLEMENT_BASE_CAST(String)
24
25
  IMPLEMENT_BASE_CAST(String_Constant)
25
- IMPLEMENT_BASE_CAST(Supports_Condition)
26
+ IMPLEMENT_BASE_CAST(SupportsCondition)
26
27
  IMPLEMENT_BASE_CAST(Selector)
27
- IMPLEMENT_BASE_CAST(Simple_Selector)
28
+ IMPLEMENT_BASE_CAST(SelectorComponent)
29
+ IMPLEMENT_BASE_CAST(SimpleSelector)
28
30
 
29
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,297 +12,161 @@
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
- typedef AST_Node* AST_Node_Ptr;
23
- typedef AST_Node const* AST_Node_Ptr_Const;
24
21
 
25
- class Has_Block;
26
- typedef Has_Block* Has_Block_Ptr;
27
- typedef Has_Block const* Has_Block_Ptr_Const;
22
+ class ParentStatement;
23
+
24
+ class SimpleSelector;
28
25
 
29
- class Simple_Selector;
30
- typedef Simple_Selector* Simple_Selector_Ptr;
31
- typedef Simple_Selector const* Simple_Selector_Ptr_Const;
26
+ class Parent_Reference;
32
27
 
33
28
  class PreValue;
34
- typedef PreValue* PreValue_Ptr;
35
- typedef PreValue const* PreValue_Ptr_Const;
36
- class Thunk;
37
- typedef Thunk* Thunk_Ptr;
38
- typedef Thunk const* Thunk_Ptr_Const;
39
29
  class Block;
40
- typedef Block* Block_Ptr;
41
- typedef Block const* Block_Ptr_Const;
42
30
  class Expression;
43
- typedef Expression* Expression_Ptr;
44
- typedef Expression const* Expression_Ptr_Const;
45
31
  class Statement;
46
- typedef Statement* Statement_Ptr;
47
- typedef Statement const* Statement_Ptr_Const;
48
32
  class Value;
49
- typedef Value* Value_Ptr;
50
- typedef Value const* Value_Ptr_Const;
51
33
  class Declaration;
52
- typedef Declaration* Declaration_Ptr;
53
- typedef Declaration const* Declaration_Ptr_Const;
54
- class Ruleset;
55
- typedef Ruleset* Ruleset_Ptr;
56
- typedef Ruleset const* Ruleset_Ptr_Const;
34
+ class StyleRule;
57
35
  class Bubble;
58
- typedef Bubble* Bubble_Ptr;
59
- typedef Bubble const* Bubble_Ptr_Const;
60
36
  class Trace;
61
- typedef Trace* Trace_Ptr;
62
- typedef Trace const* Trace_Ptr_Const;
63
37
 
64
- class Media_Block;
65
- typedef Media_Block* Media_Block_Ptr;
66
- typedef Media_Block const* Media_Block_Ptr_Const;
67
- class Supports_Block;
68
- typedef Supports_Block* Supports_Block_Ptr;
69
- typedef Supports_Block const* Supports_Block_Ptr_Const;
70
- class Directive;
71
- typedef Directive* Directive_Ptr;
72
- typedef Directive const* Directive_Ptr_Const;
38
+ class MediaRule;
39
+ class CssMediaRule;
40
+ class CssMediaQuery;
73
41
 
42
+ class SupportsRule;
43
+ class AtRule;
74
44
 
75
45
  class Keyframe_Rule;
76
- typedef Keyframe_Rule* Keyframe_Rule_Ptr;
77
- typedef Keyframe_Rule const* Keyframe_Rule_Ptr_Const;
78
- class At_Root_Block;
79
- typedef At_Root_Block* At_Root_Block_Ptr;
80
- typedef At_Root_Block const* At_Root_Block_Ptr_Const;
46
+ class AtRootRule;
81
47
  class Assignment;
82
- typedef Assignment* Assignment_Ptr;
83
- typedef Assignment const* Assignment_Ptr_Const;
84
48
 
85
49
  class Import;
86
- typedef Import* Import_Ptr;
87
- typedef Import const* Import_Ptr_Const;
88
50
  class Import_Stub;
89
- typedef Import_Stub* Import_Stub_Ptr;
90
- typedef Import_Stub const* Import_Stub_Ptr_Const;
91
- class Warning;
92
- typedef Warning* Warning_Ptr;
93
- typedef Warning const* Warning_Ptr_Const;
94
-
95
- class Error;
96
- typedef Error* Error_Ptr;
97
- typedef Error const* Error_Ptr_Const;
98
- class Debug;
99
- typedef Debug* Debug_Ptr;
100
- typedef Debug const* Debug_Ptr_Const;
51
+ class WarningRule;
52
+
53
+ class ErrorRule;
54
+ class DebugRule;
101
55
  class Comment;
102
- typedef Comment* Comment_Ptr;
103
- typedef Comment const* Comment_Ptr_Const;
104
56
 
105
57
  class If;
106
- typedef If* If_Ptr;
107
- typedef If const* If_Ptr_Const;
108
- class For;
109
- typedef For* For_Ptr;
110
- typedef For const* For_Ptr_Const;
111
- class Each;
112
- typedef Each* Each_Ptr;
113
- typedef Each const* Each_Ptr_Const;
114
- class While;
115
- typedef While* While_Ptr;
116
- typedef While const* While_Ptr_Const;
58
+ class ForRule;
59
+ class EachRule;
60
+ class WhileRule;
117
61
  class Return;
118
- typedef Return* Return_Ptr;
119
- typedef Return const* Return_Ptr_Const;
120
62
  class Content;
121
- typedef Content* Content_Ptr;
122
- typedef Content const* Content_Ptr_Const;
123
- class Extension;
124
- typedef Extension* Extension_Ptr;
125
- typedef Extension const* Extension_Ptr_Const;
63
+ class ExtendRule;
126
64
  class Definition;
127
- typedef Definition* Definition_Ptr;
128
- typedef Definition const* Definition_Ptr_Const;
129
65
 
130
66
  class List;
131
- typedef List* List_Ptr;
132
- typedef List const* List_Ptr_Const;
133
67
  class Map;
134
- typedef Map* Map_Ptr;
135
- typedef Map const* Map_Ptr_Const;
136
68
  class Function;
137
- typedef Function* Function_Ptr;
138
- typedef Function const* Function_Ptr_Const;
139
69
 
140
70
  class Mixin_Call;
141
- typedef Mixin_Call* Mixin_Call_Ptr;
142
- typedef Mixin_Call const* Mixin_Call_Ptr_Const;
143
71
  class Binary_Expression;
144
- typedef Binary_Expression* Binary_Expression_Ptr;
145
- typedef Binary_Expression const* Binary_Expression_Ptr_Const;
146
72
  class Unary_Expression;
147
- typedef Unary_Expression* Unary_Expression_Ptr;
148
- typedef Unary_Expression const* Unary_Expression_Ptr_Const;
149
73
  class Function_Call;
150
- typedef Function_Call* Function_Call_Ptr;
151
- typedef Function_Call const* Function_Call_Ptr_Const;
152
- class Function_Call_Schema;
153
- typedef Function_Call_Schema* Function_Call_Schema_Ptr;
154
- typedef Function_Call_Schema const* Function_Call_Schema_Ptr_Const;
155
74
  class Custom_Warning;
156
- typedef Custom_Warning* Custom_Warning_Ptr;
157
- typedef Custom_Warning const* Custom_Warning_Ptr_Const;
158
75
  class Custom_Error;
159
- typedef Custom_Error* Custom_Error_Ptr;
160
- typedef Custom_Error const* Custom_Error_Ptr_Const;
161
76
 
162
77
  class Variable;
163
- typedef Variable* Variable_Ptr;
164
- typedef Variable const* Variable_Ptr_Const;
165
78
  class Number;
166
- typedef Number* Number_Ptr;
167
- typedef Number const* Number_Ptr_Const;
168
79
  class Color;
169
- typedef Color* Color_Ptr;
170
- typedef Color const* Color_Ptr_Const;
80
+ class Color_RGBA;
81
+ class Color_HSLA;
171
82
  class Boolean;
172
- typedef Boolean* Boolean_Ptr;
173
- typedef Boolean const* Boolean_Ptr_Const;
174
83
  class String;
175
- typedef String* String_Ptr;
176
- typedef String const* String_Ptr_Const;
84
+ class Null;
177
85
 
178
86
  class String_Schema;
179
- typedef String_Schema* String_Schema_Ptr;
180
- typedef String_Schema const* String_Schema_Ptr_Const;
181
87
  class String_Constant;
182
- typedef String_Constant* String_Constant_Ptr;
183
- typedef String_Constant const* String_Constant_Ptr_Const;
184
88
  class String_Quoted;
185
- typedef String_Quoted* String_Quoted_Ptr;
186
- typedef String_Quoted const* String_Quoted_Ptr_Const;
187
89
 
188
90
  class Media_Query;
189
- typedef Media_Query* Media_Query_Ptr;
190
- typedef Media_Query const* Media_Query_Ptr_Const;
191
91
  class Media_Query_Expression;
192
- typedef Media_Query_Expression* Media_Query_Expression_Ptr;
193
- typedef Media_Query_Expression const* Media_Query_Expression_Ptr_Const;
194
- class Supports_Condition;
195
- typedef Supports_Condition* Supports_Condition_Ptr;
196
- typedef Supports_Condition const* Supports_Condition_Ptr_Const;
197
- class Supports_Operator;
198
- typedef Supports_Operator* Supports_Operator_Ptr;
199
- typedef Supports_Operator const* Supports_Operator_Ptr_Const;
200
- class Supports_Negation;
201
- typedef Supports_Negation* Supports_Negation_Ptr;
202
- typedef Supports_Negation const* Supports_Negation_Ptr_Const;
203
- class Supports_Declaration;
204
- typedef Supports_Declaration* Supports_Declaration_Ptr;
205
- typedef Supports_Declaration const* Supports_Declaration_Ptr_Const;
92
+ class SupportsCondition;
93
+ class SupportsOperation;
94
+ class SupportsNegation;
95
+ class SupportsDeclaration;
206
96
  class Supports_Interpolation;
207
- typedef Supports_Interpolation* Supports_Interpolation_Ptr;
208
- typedef Supports_Interpolation const* Supports_Interpolation_Ptr_Const;
209
-
210
-
211
- class Null;
212
- typedef Null* Null_Ptr;
213
- typedef Null const* Null_Ptr_Const;
214
-
97
+
215
98
  class At_Root_Query;
216
- typedef At_Root_Query* At_Root_Query_Ptr;
217
- typedef At_Root_Query const* At_Root_Query_Ptr_Const;
218
- class Parent_Selector;
219
- typedef Parent_Selector* Parent_Selector_Ptr;
220
- typedef Parent_Selector const* Parent_Selector_Ptr_Const;
221
99
  class Parameter;
222
- typedef Parameter* Parameter_Ptr;
223
- typedef Parameter const* Parameter_Ptr_Const;
224
100
  class Parameters;
225
- typedef Parameters* Parameters_Ptr;
226
- typedef Parameters const* Parameters_Ptr_Const;
227
101
  class Argument;
228
- typedef Argument* Argument_Ptr;
229
- typedef Argument const* Argument_Ptr_Const;
230
102
  class Arguments;
231
- typedef Arguments* Arguments_Ptr;
232
- typedef Arguments const* Arguments_Ptr_Const;
233
103
  class Selector;
234
- typedef Selector* Selector_Ptr;
235
- typedef Selector const* Selector_Ptr_Const;
236
104
 
237
105
 
238
106
  class Selector_Schema;
239
- typedef Selector_Schema* Selector_Schema_Ptr;
240
- typedef Selector_Schema const* Selector_Schema_Ptr_Const;
241
- class Placeholder_Selector;
242
- typedef Placeholder_Selector* Placeholder_Selector_Ptr;
243
- typedef Placeholder_Selector const* Placeholder_Selector_Ptr_Const;
244
- class Element_Selector;
245
- typedef Element_Selector* Element_Selector_Ptr;
246
- typedef Element_Selector const* Element_Selector_Ptr_Const;
247
- class Class_Selector;
248
- typedef Class_Selector* Class_Selector_Ptr;
249
- typedef Class_Selector const* Class_Selector_Ptr_Const;
250
- class Id_Selector;
251
- typedef Id_Selector* Id_Selector_Ptr;
252
- typedef Id_Selector const* Id_Selector_Ptr_Const;
253
- class Attribute_Selector;
254
- typedef Attribute_Selector* Attribute_Selector_Ptr;
255
- typedef Attribute_Selector const* Attribute_Selector_Ptr_Const;
256
-
257
- class Pseudo_Selector;
258
- typedef Pseudo_Selector* Pseudo_Selector_Ptr;
259
- typedef Pseudo_Selector const * Pseudo_Selector_Ptr_Const;
260
- class Wrapped_Selector;
261
- typedef Wrapped_Selector* Wrapped_Selector_Ptr;
262
- typedef Wrapped_Selector const * Wrapped_Selector_Ptr_Const;
263
- class Compound_Selector;
264
- typedef Compound_Selector* Compound_Selector_Ptr;
265
- typedef Compound_Selector const * Compound_Selector_Ptr_Const;
266
- class Complex_Selector;
267
- typedef Complex_Selector* Complex_Selector_Ptr;
268
- typedef Complex_Selector const * Complex_Selector_Ptr_Const;
269
- class Selector_List;
270
- typedef Selector_List* Selector_List_Ptr;
271
- typedef Selector_List const * Selector_List_Ptr_Const;
272
-
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;
273
120
 
274
121
  // common classes
275
122
  class Context;
276
123
  class Expand;
277
124
  class Eval;
278
125
 
126
+ class Extension;
127
+
279
128
  // declare classes that are instances of memory nodes
280
- // #define IMPL_MEM_OBJ(type) using type##_Obj = SharedImpl<type>
281
- #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);
282
139
 
283
140
  IMPL_MEM_OBJ(AST_Node);
284
141
  IMPL_MEM_OBJ(Statement);
285
142
  IMPL_MEM_OBJ(Block);
286
- IMPL_MEM_OBJ(Ruleset);
143
+ IMPL_MEM_OBJ(StyleRule);
287
144
  IMPL_MEM_OBJ(Bubble);
288
145
  IMPL_MEM_OBJ(Trace);
289
- IMPL_MEM_OBJ(Media_Block);
290
- IMPL_MEM_OBJ(Supports_Block);
291
- 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);
292
151
  IMPL_MEM_OBJ(Keyframe_Rule);
293
- IMPL_MEM_OBJ(At_Root_Block);
152
+ IMPL_MEM_OBJ(AtRootRule);
294
153
  IMPL_MEM_OBJ(Declaration);
295
154
  IMPL_MEM_OBJ(Assignment);
296
155
  IMPL_MEM_OBJ(Import);
297
156
  IMPL_MEM_OBJ(Import_Stub);
298
- IMPL_MEM_OBJ(Warning);
299
- IMPL_MEM_OBJ(Error);
300
- IMPL_MEM_OBJ(Debug);
157
+ IMPL_MEM_OBJ(WarningRule);
158
+ IMPL_MEM_OBJ(ErrorRule);
159
+ IMPL_MEM_OBJ(DebugRule);
301
160
  IMPL_MEM_OBJ(Comment);
302
161
  IMPL_MEM_OBJ(PreValue);
303
- IMPL_MEM_OBJ(Has_Block);
304
- IMPL_MEM_OBJ(Thunk);
162
+ IMPL_MEM_OBJ(ParentStatement);
305
163
  IMPL_MEM_OBJ(If);
306
- IMPL_MEM_OBJ(For);
307
- IMPL_MEM_OBJ(Each);
308
- IMPL_MEM_OBJ(While);
164
+ IMPL_MEM_OBJ(ForRule);
165
+ IMPL_MEM_OBJ(EachRule);
166
+ IMPL_MEM_OBJ(WhileRule);
309
167
  IMPL_MEM_OBJ(Return);
310
168
  IMPL_MEM_OBJ(Content);
311
- IMPL_MEM_OBJ(Extension);
169
+ IMPL_MEM_OBJ(ExtendRule);
312
170
  IMPL_MEM_OBJ(Definition);
313
171
  IMPL_MEM_OBJ(Mixin_Call);
314
172
  IMPL_MEM_OBJ(Value);
@@ -319,12 +177,13 @@ namespace Sass {
319
177
  IMPL_MEM_OBJ(Binary_Expression);
320
178
  IMPL_MEM_OBJ(Unary_Expression);
321
179
  IMPL_MEM_OBJ(Function_Call);
322
- IMPL_MEM_OBJ(Function_Call_Schema);
323
180
  IMPL_MEM_OBJ(Custom_Warning);
324
181
  IMPL_MEM_OBJ(Custom_Error);
325
182
  IMPL_MEM_OBJ(Variable);
326
183
  IMPL_MEM_OBJ(Number);
327
184
  IMPL_MEM_OBJ(Color);
185
+ IMPL_MEM_OBJ(Color_RGBA);
186
+ IMPL_MEM_OBJ(Color_HSLA);
328
187
  IMPL_MEM_OBJ(Boolean);
329
188
  IMPL_MEM_OBJ(String_Schema);
330
189
  IMPL_MEM_OBJ(String);
@@ -332,94 +191,44 @@ namespace Sass {
332
191
  IMPL_MEM_OBJ(String_Quoted);
333
192
  IMPL_MEM_OBJ(Media_Query);
334
193
  IMPL_MEM_OBJ(Media_Query_Expression);
335
- IMPL_MEM_OBJ(Supports_Condition);
336
- IMPL_MEM_OBJ(Supports_Operator);
337
- IMPL_MEM_OBJ(Supports_Negation);
338
- 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);
339
198
  IMPL_MEM_OBJ(Supports_Interpolation);
340
199
  IMPL_MEM_OBJ(At_Root_Query);
341
200
  IMPL_MEM_OBJ(Null);
342
- IMPL_MEM_OBJ(Parent_Selector);
201
+ IMPL_MEM_OBJ(Parent_Reference);
343
202
  IMPL_MEM_OBJ(Parameter);
344
203
  IMPL_MEM_OBJ(Parameters);
345
204
  IMPL_MEM_OBJ(Argument);
346
205
  IMPL_MEM_OBJ(Arguments);
347
206
  IMPL_MEM_OBJ(Selector);
348
207
  IMPL_MEM_OBJ(Selector_Schema);
349
- IMPL_MEM_OBJ(Simple_Selector);
350
- IMPL_MEM_OBJ(Placeholder_Selector);
351
- IMPL_MEM_OBJ(Element_Selector);
352
- IMPL_MEM_OBJ(Class_Selector);
353
- IMPL_MEM_OBJ(Id_Selector);
354
- IMPL_MEM_OBJ(Attribute_Selector);
355
- IMPL_MEM_OBJ(Pseudo_Selector);
356
- IMPL_MEM_OBJ(Wrapped_Selector);
357
- IMPL_MEM_OBJ(Compound_Selector);
358
- IMPL_MEM_OBJ(Complex_Selector);
359
- IMPL_MEM_OBJ(Selector_List);
360
-
361
- // ###########################################################################
362
- // Implement compare, order and hashing operations for AST Nodes
363
- // ###########################################################################
364
-
365
- struct HashNodes {
366
- template <class T>
367
- size_t operator() (const T& ex) const {
368
- return ex.isNull() ? 0 : ex->hash();
369
- }
370
- };
371
- struct OrderNodes {
372
- template <class T>
373
- bool operator() (const T& lhs, const T& rhs) const {
374
- return !lhs.isNull() && !rhs.isNull() && *lhs < *rhs;
375
- }
376
- };
377
- struct CompareNodes {
378
- template <class T>
379
- bool operator() (const T& lhs, const T& rhs) const {
380
- // code around sass logic issue. 1px == 1 is true
381
- // but both items are still different keys in maps
382
- if (dynamic_cast<Number*>(lhs.ptr()))
383
- if (dynamic_cast<Number*>(rhs.ptr()))
384
- return lhs->hash() == rhs->hash();
385
- return !lhs.isNull() && !rhs.isNull() && *lhs == *rhs;
386
- }
387
- };
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);
388
221
 
389
222
  // ###########################################################################
390
223
  // some often used typedefs
391
224
  // ###########################################################################
392
225
 
393
- typedef std::unordered_map<
394
- Expression_Obj, // key
395
- Expression_Obj, // value
396
- HashNodes, // hasher
397
- CompareNodes // compare
398
- > ExpressionMap;
399
- typedef std::unordered_set<
400
- Expression_Obj, // value
401
- HashNodes, // hasher
402
- CompareNodes // compare
403
- > ExpressionSet;
404
-
405
- typedef std::string SubSetMapKey;
406
- typedef std::vector<std::string> SubSetMapKeys;
407
-
408
- typedef std::pair<Complex_Selector_Obj, Compound_Selector_Obj> SubSetMapPair;
409
- typedef std::pair<Compound_Selector_Obj, Complex_Selector_Obj> SubSetMapLookup;
410
- typedef std::vector<SubSetMapPair> SubSetMapPairs;
411
- typedef std::vector<SubSetMapLookup> SubSetMapLookups;
412
-
413
- typedef std::pair<Complex_Selector_Obj, SubSetMapPairs> SubSetMapResult;
414
- typedef std::vector<SubSetMapResult> SubSetMapResults;
415
-
416
- typedef std::deque<Complex_Selector_Obj> ComplexSelectorDeque;
417
- typedef std::set<Simple_Selector_Obj, OrderNodes> SimpleSelectorSet;
418
- typedef std::set<Complex_Selector_Obj, OrderNodes> ComplexSelectorSet;
419
- typedef std::set<Compound_Selector_Obj, OrderNodes> CompoundSelectorSet;
420
- typedef std::unordered_set<Simple_Selector_Obj, HashNodes, CompareNodes> SimpleSelectorDict;
421
-
422
- 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;
423
232
 
424
233
  // only to switch implementations for testing
425
234
  #define environment_map std::map
@@ -448,15 +257,17 @@ namespace Sass {
448
257
  DECLARE_BASE_CAST(AST_Node)
449
258
  DECLARE_BASE_CAST(Expression)
450
259
  DECLARE_BASE_CAST(Statement)
451
- DECLARE_BASE_CAST(Has_Block)
260
+ DECLARE_BASE_CAST(ParentStatement)
452
261
  DECLARE_BASE_CAST(PreValue)
453
262
  DECLARE_BASE_CAST(Value)
454
263
  DECLARE_BASE_CAST(List)
264
+ DECLARE_BASE_CAST(Color)
455
265
  DECLARE_BASE_CAST(String)
456
266
  DECLARE_BASE_CAST(String_Constant)
457
- DECLARE_BASE_CAST(Supports_Condition)
267
+ DECLARE_BASE_CAST(SupportsCondition)
458
268
  DECLARE_BASE_CAST(Selector)
459
- DECLARE_BASE_CAST(Simple_Selector)
269
+ DECLARE_BASE_CAST(SimpleSelector)
270
+ DECLARE_BASE_CAST(SelectorComponent)
460
271
 
461
272
  }
462
273