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,93 +1,81 @@
1
1
  #ifndef SASS_CONTEXT_H
2
2
  #define SASS_CONTEXT_H
3
3
 
4
- #include <string>
5
- #include <vector>
6
- #include <map>
4
+ // sass.hpp must go before all system headers to get the
5
+ // __EXTENSIONS__ fix on Solaris.
6
+ #include "sass.hpp"
7
+ #include "ast.hpp"
8
+
7
9
 
8
10
  #define BUFFERSIZE 255
9
11
  #include "b64/encode.h"
10
12
 
11
- #include "ast_fwd_decl.hpp"
12
- #include "kwd_arg_macros.hpp"
13
- #include "ast_fwd_decl.hpp"
14
13
  #include "sass_context.hpp"
15
- #include "environment.hpp"
16
- #include "source_map.hpp"
17
- #include "subset_map.hpp"
18
- #include "backtrace.hpp"
19
- #include "output.hpp"
14
+ #include "stylesheet.hpp"
20
15
  #include "plugins.hpp"
21
- #include "file.hpp"
22
-
23
-
24
- struct Sass_Function;
16
+ #include "output.hpp"
25
17
 
26
18
  namespace Sass {
27
19
 
28
20
  class Context {
29
21
  public:
30
- void import_url (Import_Ptr imp, std::string load_path, const std::string& ctx_path);
31
- bool call_headers(const std::string& load_path, const char* ctx_path, ParserState& pstate, Import_Ptr imp)
22
+ void import_url (Import* imp, sass::string load_path, const sass::string& ctx_path);
23
+ bool call_headers(const sass::string& load_path, const char* ctx_path, SourceSpan& pstate, Import* imp)
32
24
  { return call_loader(load_path, ctx_path, pstate, imp, c_headers, false); };
33
- bool call_importers(const std::string& load_path, const char* ctx_path, ParserState& pstate, Import_Ptr imp)
25
+ bool call_importers(const sass::string& load_path, const char* ctx_path, SourceSpan& pstate, Import* imp)
34
26
  { return call_loader(load_path, ctx_path, pstate, imp, c_importers, true); };
35
27
 
36
28
  private:
37
- bool call_loader(const std::string& load_path, const char* ctx_path, ParserState& pstate, Import_Ptr imp, std::vector<Sass_Importer_Entry> importers, bool only_one = true);
29
+ bool call_loader(const sass::string& load_path, const char* ctx_path, SourceSpan& pstate, Import* imp, sass::vector<Sass_Importer_Entry> importers, bool only_one = true);
38
30
 
39
31
  public:
40
- const std::string CWD;
32
+ const sass::string CWD;
41
33
  struct Sass_Options& c_options;
42
- std::string entry_path;
34
+ sass::string entry_path;
43
35
  size_t head_imports;
44
36
  Plugins plugins;
45
37
  Output emitter;
46
38
 
47
39
  // generic ast node garbage container
48
40
  // used to avoid possible circular refs
49
- std::vector<AST_Node_Obj> ast_gc;
41
+ CallStack ast_gc;
50
42
  // resources add under our control
51
43
  // these are guaranteed to be freed
52
- std::vector<char*> strings;
53
- std::vector<Resource> resources;
54
- std::map<const std::string, StyleSheet> sheets;
55
- Subset_Map subset_map;
56
- std::vector<Sass_Import_Entry> import_stack;
57
- std::vector<Sass_Callee> callee_stack;
58
- std::vector<Backtrace> traces;
44
+ sass::vector<char*> strings;
45
+ sass::vector<Resource> resources;
46
+ std::map<const sass::string, StyleSheet> sheets;
47
+ ImporterStack import_stack;
48
+ sass::vector<Sass_Callee> callee_stack;
49
+ sass::vector<Backtrace> traces;
50
+ Extender extender;
59
51
 
60
52
  struct Sass_Compiler* c_compiler;
61
53
 
62
54
  // absolute paths to includes
63
- std::vector<std::string> included_files;
55
+ sass::vector<sass::string> included_files;
64
56
  // relative includes for sourcemap
65
- std::vector<std::string> srcmap_links;
57
+ sass::vector<sass::string> srcmap_links;
66
58
  // vectors above have same size
67
59
 
68
- std::vector<std::string> plugin_paths; // relative paths to load plugins
69
- std::vector<std::string> include_paths; // lookup paths for includes
70
-
71
-
72
-
73
-
60
+ sass::vector<sass::string> plugin_paths; // relative paths to load plugins
61
+ sass::vector<sass::string> include_paths; // lookup paths for includes
74
62
 
75
- void apply_custom_headers(Block_Obj root, const char* path, ParserState pstate);
63
+ void apply_custom_headers(Block_Obj root, const char* path, SourceSpan pstate);
76
64
 
77
- std::vector<Sass_Importer_Entry> c_headers;
78
- std::vector<Sass_Importer_Entry> c_importers;
79
- std::vector<Sass_Function_Entry> c_functions;
65
+ sass::vector<Sass_Importer_Entry> c_headers;
66
+ sass::vector<Sass_Importer_Entry> c_importers;
67
+ sass::vector<Sass_Function_Entry> c_functions;
80
68
 
81
69
  void add_c_header(Sass_Importer_Entry header);
82
70
  void add_c_importer(Sass_Importer_Entry importer);
83
71
  void add_c_function(Sass_Function_Entry function);
84
72
 
85
- const std::string indent; // String to be used for indentation
86
- const std::string linefeed; // String to be used for line feeds
87
- const std::string input_path; // for relative paths in src-map
88
- const std::string output_path; // for relative paths to the output
89
- const std::string source_map_file; // path to source map file (enables feature)
90
- const std::string source_map_root; // path for sourceRoot property (pass-through)
73
+ const sass::string indent; // String to be used for indentation
74
+ const sass::string linefeed; // String to be used for line feeds
75
+ const sass::string input_path; // for relative paths in src-map
76
+ const sass::string output_path; // for relative paths to the output
77
+ const sass::string source_map_file; // path to source map file (enables feature)
78
+ const sass::string source_map_root; // path for sourceRoot property (pass-through)
91
79
 
92
80
  virtual ~Context();
93
81
  Context(struct Sass_Context&);
@@ -97,29 +85,29 @@ namespace Sass {
97
85
  virtual char* render_srcmap();
98
86
 
99
87
  void register_resource(const Include&, const Resource&);
100
- void register_resource(const Include&, const Resource&, ParserState&);
101
- std::vector<Include> find_includes(const Importer& import);
102
- Include load_import(const Importer&, ParserState pstate);
88
+ void register_resource(const Include&, const Resource&, SourceSpan&);
89
+ sass::vector<Include> find_includes(const Importer& import);
90
+ Include load_import(const Importer&, SourceSpan pstate);
103
91
 
104
92
  Sass_Output_Style output_style() { return c_options.output_style; };
105
- std::vector<std::string> get_included_files(bool skip = false, size_t headers = 0);
93
+ sass::vector<sass::string> get_included_files(bool skip = false, size_t headers = 0);
106
94
 
107
95
  private:
108
96
  void collect_plugin_paths(const char* paths_str);
109
97
  void collect_plugin_paths(string_list* paths_array);
110
98
  void collect_include_paths(const char* paths_str);
111
99
  void collect_include_paths(string_list* paths_array);
112
- std::string format_embedded_source_map();
113
- std::string format_source_mapping_url(const std::string& out_path);
100
+ sass::string format_embedded_source_map();
101
+ sass::string format_source_mapping_url(const sass::string& out_path);
114
102
 
115
103
 
116
104
  // void register_built_in_functions(Env* env);
117
105
  // void register_function(Signature sig, Native_Function f, Env* env);
118
106
  // void register_function(Signature sig, Native_Function f, size_t arity, Env* env);
119
- // void register_overload_stub(std::string name, Env* env);
107
+ // void register_overload_stub(sass::string name, Env* env);
120
108
 
121
109
  public:
122
- const std::string& cwd() { return CWD; };
110
+ const sass::string& cwd() { return CWD; };
123
111
  };
124
112
 
125
113
  class File_Context : public Context {
@@ -1,4 +1,7 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
1
3
  #include "sass.hpp"
4
+
2
5
  #include <iostream>
3
6
  #include <typeinfo>
4
7
  #include <vector>
@@ -9,18 +12,17 @@
9
12
  namespace Sass {
10
13
 
11
14
  Cssize::Cssize(Context& ctx)
12
- : ctx(ctx),
13
- traces(ctx.traces),
14
- block_stack(std::vector<Block_Ptr>()),
15
- p_stack(std::vector<Statement_Ptr>())
15
+ : traces(ctx.traces),
16
+ block_stack(BlockStack()),
17
+ p_stack(sass::vector<Statement*>())
16
18
  { }
17
19
 
18
- Statement_Ptr Cssize::parent()
20
+ Statement* Cssize::parent()
19
21
  {
20
22
  return p_stack.size() ? p_stack.back() : block_stack.front();
21
23
  }
22
24
 
23
- Block_Ptr Cssize::operator()(Block_Ptr b)
25
+ Block* Cssize::operator()(Block* b)
24
26
  {
25
27
  Block_Obj bb = SASS_MEMORY_NEW(Block, b->pstate(), b->length(), b->is_root());
26
28
  // bb->tabs(b->tabs());
@@ -30,7 +32,7 @@ namespace Sass {
30
32
  return bb.detach();
31
33
  }
32
34
 
33
- Statement_Ptr Cssize::operator()(Trace_Ptr t)
35
+ Statement* Cssize::operator()(Trace* t)
34
36
  {
35
37
  traces.push_back(Backtrace(t->pstate()));
36
38
  auto result = t->block()->perform(this);
@@ -38,11 +40,11 @@ namespace Sass {
38
40
  return result;
39
41
  }
40
42
 
41
- Statement_Ptr Cssize::operator()(Declaration_Ptr d)
43
+ Statement* Cssize::operator()(Declaration* d)
42
44
  {
43
45
  String_Obj property = Cast<String>(d->property());
44
46
 
45
- if (Declaration_Ptr dd = Cast<Declaration>(parent())) {
47
+ if (Declaration* dd = Cast<Declaration>(parent())) {
46
48
  String_Obj parent_property = Cast<String>(dd->property());
47
49
  property = SASS_MEMORY_NEW(String_Constant,
48
50
  d->property()->pstate(),
@@ -78,17 +80,17 @@ namespace Sass {
78
80
  return 0;
79
81
  }
80
82
 
81
- Statement_Ptr Cssize::operator()(Directive_Ptr r)
83
+ Statement* Cssize::operator()(AtRule* r)
82
84
  {
83
85
  if (!r->block() || !r->block()->length()) return r;
84
86
 
85
87
  if (parent()->statement_type() == Statement::RULESET)
86
88
  {
87
- return (r->is_keyframes()) ? SASS_MEMORY_NEW(Bubble, r->pstate(), r) : bubble(r);
89
+ return r->is_keyframes() ? SASS_MEMORY_NEW(Bubble, r->pstate(), r) : bubble(r);
88
90
  }
89
91
 
90
92
  p_stack.push_back(r);
91
- Directive_Obj rr = SASS_MEMORY_NEW(Directive,
93
+ AtRuleObj rr = SASS_MEMORY_NEW(AtRule,
92
94
  r->pstate(),
93
95
  r->keyword(),
94
96
  r->selector(),
@@ -105,15 +107,15 @@ namespace Sass {
105
107
  Bubble_Obj s_obj = Cast<Bubble>(s);
106
108
  s = s_obj->node();
107
109
  if (s->statement_type() != Statement::DIRECTIVE) directive_exists = false;
108
- else directive_exists = (Cast<Directive>(s)->keyword() == rr->keyword());
110
+ else directive_exists = (Cast<AtRule>(s)->keyword() == rr->keyword());
109
111
  }
110
112
 
111
113
  }
112
114
 
113
- Block_Ptr result = SASS_MEMORY_NEW(Block, rr->pstate());
115
+ Block* result = SASS_MEMORY_NEW(Block, rr->pstate());
114
116
  if (!(directive_exists || rr->is_keyframes()))
115
117
  {
116
- Directive_Ptr empty_node = Cast<Directive>(rr);
118
+ AtRule* empty_node = Cast<AtRule>(rr);
117
119
  empty_node->block(SASS_MEMORY_NEW(Block, rr->block() ? rr->block()->pstate() : rr->pstate()));
118
120
  result->append(empty_node);
119
121
  }
@@ -128,7 +130,7 @@ namespace Sass {
128
130
  return result;
129
131
  }
130
132
 
131
- Statement_Ptr Cssize::operator()(Keyframe_Rule_Ptr r)
133
+ Statement* Cssize::operator()(Keyframe_Rule* r)
132
134
  {
133
135
  if (!r->block() || !r->block()->length()) return r;
134
136
 
@@ -140,20 +142,20 @@ namespace Sass {
140
142
  return debubble(rr->block(), rr);
141
143
  }
142
144
 
143
- Statement_Ptr Cssize::operator()(Ruleset_Ptr r)
145
+ Statement* Cssize::operator()(StyleRule* r)
144
146
  {
145
147
  p_stack.push_back(r);
146
148
  // this can return a string schema
147
149
  // string schema is not a statement!
148
150
  // r->block() is already a string schema
149
- // and that is comming from propset expand
150
- Block_Ptr bb = operator()(r->block());
151
+ // and that is coming from propset expand
152
+ Block* bb = operator()(r->block());
151
153
  // this should protect us (at least a bit) from our mess
152
154
  // fixing this properly is harder that it should be ...
153
155
  if (Cast<Statement>(bb) == NULL) {
154
156
  error("Illegal nesting: Only properties may be nested beneath properties.", r->block()->pstate(), traces);
155
157
  }
156
- Ruleset_Obj rr = SASS_MEMORY_NEW(Ruleset,
158
+ StyleRuleObj rr = SASS_MEMORY_NEW(StyleRule,
157
159
  r->pstate(),
158
160
  r->selector(),
159
161
  bb);
@@ -167,10 +169,10 @@ namespace Sass {
167
169
  }
168
170
 
169
171
  Block_Obj props = SASS_MEMORY_NEW(Block, rr->block()->pstate());
170
- Block_Ptr rules = SASS_MEMORY_NEW(Block, rr->block()->pstate());
172
+ Block* rules = SASS_MEMORY_NEW(Block, rr->block()->pstate());
171
173
  for (size_t i = 0, L = rr->block()->length(); i < L; i++)
172
174
  {
173
- Statement_Ptr s = rr->block()->at(i);
175
+ Statement* s = rr->block()->at(i);
174
176
  if (bubblable(s)) rules->append(s);
175
177
  if (!bubblable(s)) props->append(s);
176
178
  }
@@ -183,14 +185,14 @@ namespace Sass {
183
185
 
184
186
  for (size_t i = 0, L = rules->length(); i < L; i++)
185
187
  {
186
- Statement_Ptr stm = rules->at(i);
188
+ Statement* stm = rules->at(i);
187
189
  stm->tabs(stm->tabs() + 1);
188
190
  }
189
191
 
190
192
  rules->unshift(rr);
191
193
  }
192
194
 
193
- Block_Ptr ptr = rules;
195
+ Block* ptr = rules;
194
196
  rules = debubble(rules);
195
197
  void* lp = ptr;
196
198
  void* rp = rules;
@@ -207,25 +209,28 @@ namespace Sass {
207
209
  return rules;
208
210
  }
209
211
 
210
- Statement_Ptr Cssize::operator()(Null_Ptr m)
212
+ Statement* Cssize::operator()(Null* m)
211
213
  {
212
214
  return 0;
213
215
  }
214
216
 
215
- Statement_Ptr Cssize::operator()(Media_Block_Ptr m)
217
+ Statement* Cssize::operator()(CssMediaRule* m)
216
218
  {
217
219
  if (parent()->statement_type() == Statement::RULESET)
218
- { return bubble(m); }
220
+ {
221
+ return bubble(m);
222
+ }
219
223
 
220
224
  if (parent()->statement_type() == Statement::MEDIA)
221
- { return SASS_MEMORY_NEW(Bubble, m->pstate(), m); }
225
+ {
226
+ return SASS_MEMORY_NEW(Bubble, m->pstate(), m);
227
+ }
222
228
 
223
229
  p_stack.push_back(m);
224
230
 
225
- Media_Block_Obj mm = SASS_MEMORY_NEW(Media_Block,
226
- m->pstate(),
227
- m->media_queries(),
228
- operator()(m->block()));
231
+ CssMediaRuleObj mm = SASS_MEMORY_NEW(CssMediaRule, m->pstate(), m->block());
232
+ mm->concat(m->elements());
233
+ mm->block(operator()(m->block()));
229
234
  mm->tabs(m->tabs());
230
235
 
231
236
  p_stack.pop_back();
@@ -233,7 +238,7 @@ namespace Sass {
233
238
  return debubble(mm->block(), mm);
234
239
  }
235
240
 
236
- Statement_Ptr Cssize::operator()(Supports_Block_Ptr m)
241
+ Statement* Cssize::operator()(SupportsRule* m)
237
242
  {
238
243
  if (!m->block()->length())
239
244
  { return m; }
@@ -243,7 +248,7 @@ namespace Sass {
243
248
 
244
249
  p_stack.push_back(m);
245
250
 
246
- Supports_Block_Obj mm = SASS_MEMORY_NEW(Supports_Block,
251
+ SupportsRuleObj mm = SASS_MEMORY_NEW(SupportsRule,
247
252
  m->pstate(),
248
253
  m->condition(),
249
254
  operator()(m->block()));
@@ -254,17 +259,17 @@ namespace Sass {
254
259
  return debubble(mm->block(), mm);
255
260
  }
256
261
 
257
- Statement_Ptr Cssize::operator()(At_Root_Block_Ptr m)
262
+ Statement* Cssize::operator()(AtRootRule* m)
258
263
  {
259
264
  bool tmp = false;
260
265
  for (size_t i = 0, L = p_stack.size(); i < L; ++i) {
261
- Statement_Ptr s = p_stack[i];
266
+ Statement* s = p_stack[i];
262
267
  tmp |= m->exclude_node(s);
263
268
  }
264
269
 
265
270
  if (!tmp && m->block())
266
271
  {
267
- Block_Ptr bb = operator()(m->block());
272
+ Block* bb = operator()(m->block());
268
273
  for (size_t i = 0, L = bb->length(); i < L; ++i) {
269
274
  // (bb->elements())[i]->tabs(m->tabs());
270
275
  Statement_Obj stm = bb->at(i);
@@ -282,33 +287,33 @@ namespace Sass {
282
287
  return bubble(m);
283
288
  }
284
289
 
285
- Statement_Ptr Cssize::bubble(Directive_Ptr m)
290
+ Statement* Cssize::bubble(AtRule* m)
286
291
  {
287
- Block_Ptr bb = SASS_MEMORY_NEW(Block, this->parent()->pstate());
288
- Has_Block_Obj new_rule = Cast<Has_Block>(SASS_MEMORY_COPY(this->parent()));
292
+ Block* bb = SASS_MEMORY_NEW(Block, this->parent()->pstate());
293
+ ParentStatementObj new_rule = Cast<ParentStatement>(SASS_MEMORY_COPY(this->parent()));
289
294
  new_rule->block(bb);
290
295
  new_rule->tabs(this->parent()->tabs());
291
296
  new_rule->block()->concat(m->block());
292
297
 
293
298
  Block_Obj wrapper_block = SASS_MEMORY_NEW(Block, m->block() ? m->block()->pstate() : m->pstate());
294
299
  wrapper_block->append(new_rule);
295
- Directive_Obj mm = SASS_MEMORY_NEW(Directive,
300
+ AtRuleObj mm = SASS_MEMORY_NEW(AtRule,
296
301
  m->pstate(),
297
302
  m->keyword(),
298
303
  m->selector(),
299
304
  wrapper_block);
300
305
  if (m->value()) mm->value(m->value());
301
306
 
302
- Bubble_Ptr bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
307
+ Bubble* bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
303
308
  return bubble;
304
309
  }
305
310
 
306
- Statement_Ptr Cssize::bubble(At_Root_Block_Ptr m)
311
+ Statement* Cssize::bubble(AtRootRule* m)
307
312
  {
308
313
  if (!m || !m->block()) return NULL;
309
- Block_Ptr bb = SASS_MEMORY_NEW(Block, this->parent()->pstate());
310
- Has_Block_Obj new_rule = Cast<Has_Block>(SASS_MEMORY_COPY(this->parent()));
311
- Block_Ptr wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
314
+ Block* bb = SASS_MEMORY_NEW(Block, this->parent()->pstate());
315
+ ParentStatementObj new_rule = Cast<ParentStatement>(SASS_MEMORY_COPY(this->parent()));
316
+ Block* wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
312
317
  if (new_rule) {
313
318
  new_rule->block(bb);
314
319
  new_rule->tabs(this->parent()->tabs());
@@ -316,74 +321,74 @@ namespace Sass {
316
321
  wrapper_block->append(new_rule);
317
322
  }
318
323
 
319
- At_Root_Block_Ptr mm = SASS_MEMORY_NEW(At_Root_Block,
324
+ AtRootRule* mm = SASS_MEMORY_NEW(AtRootRule,
320
325
  m->pstate(),
321
326
  wrapper_block,
322
327
  m->expression());
323
- Bubble_Ptr bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
328
+ Bubble* bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
324
329
  return bubble;
325
330
  }
326
331
 
327
- Statement_Ptr Cssize::bubble(Supports_Block_Ptr m)
332
+ Statement* Cssize::bubble(SupportsRule* m)
328
333
  {
329
- Ruleset_Obj parent = Cast<Ruleset>(SASS_MEMORY_COPY(this->parent()));
334
+ StyleRuleObj parent = Cast<StyleRule>(SASS_MEMORY_COPY(this->parent()));
330
335
 
331
- Block_Ptr bb = SASS_MEMORY_NEW(Block, parent->block()->pstate());
332
- Ruleset_Ptr new_rule = SASS_MEMORY_NEW(Ruleset,
336
+ Block* bb = SASS_MEMORY_NEW(Block, parent->block()->pstate());
337
+ StyleRule* new_rule = SASS_MEMORY_NEW(StyleRule,
333
338
  parent->pstate(),
334
339
  parent->selector(),
335
340
  bb);
336
341
  new_rule->tabs(parent->tabs());
337
342
  new_rule->block()->concat(m->block());
338
343
 
339
- Block_Ptr wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
344
+ Block* wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
340
345
  wrapper_block->append(new_rule);
341
- Supports_Block_Ptr mm = SASS_MEMORY_NEW(Supports_Block,
346
+ SupportsRule* mm = SASS_MEMORY_NEW(SupportsRule,
342
347
  m->pstate(),
343
348
  m->condition(),
344
349
  wrapper_block);
345
350
 
346
351
  mm->tabs(m->tabs());
347
352
 
348
- Bubble_Ptr bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
353
+ Bubble* bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
349
354
  return bubble;
350
355
  }
351
356
 
352
- Statement_Ptr Cssize::bubble(Media_Block_Ptr m)
357
+ Statement* Cssize::bubble(CssMediaRule* m)
353
358
  {
354
- Ruleset_Obj parent = Cast<Ruleset>(SASS_MEMORY_COPY(this->parent()));
359
+ StyleRuleObj parent = Cast<StyleRule>(SASS_MEMORY_COPY(this->parent()));
355
360
 
356
- Block_Ptr bb = SASS_MEMORY_NEW(Block, parent->block()->pstate());
357
- Ruleset_Ptr new_rule = SASS_MEMORY_NEW(Ruleset,
358
- parent->pstate(),
359
- parent->selector(),
360
- bb);
361
+ Block* bb = SASS_MEMORY_NEW(Block, parent->block()->pstate());
362
+ StyleRule* new_rule = SASS_MEMORY_NEW(StyleRule,
363
+ parent->pstate(),
364
+ parent->selector(),
365
+ bb);
361
366
  new_rule->tabs(parent->tabs());
362
367
  new_rule->block()->concat(m->block());
363
368
 
364
- Block_Ptr wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
369
+ Block* wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
365
370
  wrapper_block->append(new_rule);
366
- Media_Block_Obj mm = SASS_MEMORY_NEW(Media_Block,
367
- m->pstate(),
368
- m->media_queries(),
369
- wrapper_block);
371
+ CssMediaRuleObj mm = SASS_MEMORY_NEW(CssMediaRule,
372
+ m->pstate(),
373
+ wrapper_block);
374
+ mm->concat(m->elements());
370
375
 
371
376
  mm->tabs(m->tabs());
372
377
 
373
378
  return SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
374
379
  }
375
380
 
376
- bool Cssize::bubblable(Statement_Ptr s)
381
+ bool Cssize::bubblable(Statement* s)
377
382
  {
378
- return Cast<Ruleset>(s) || s->bubbles();
383
+ return Cast<StyleRule>(s) || (s && s->bubbles());
379
384
  }
380
385
 
381
- Block_Ptr Cssize::flatten(Block_Ptr b)
386
+ Block* Cssize::flatten(const Block* b)
382
387
  {
383
- Block_Ptr result = SASS_MEMORY_NEW(Block, b->pstate(), 0, b->is_root());
388
+ Block* result = SASS_MEMORY_NEW(Block, b->pstate(), 0, b->is_root());
384
389
  for (size_t i = 0, L = b->length(); i < L; ++i) {
385
- Statement_Ptr ss = b->at(i);
386
- if (Block_Ptr bb = Cast<Block>(ss)) {
390
+ Statement* ss = b->at(i);
391
+ if (const Block* bb = Cast<Block>(ss)) {
387
392
  Block_Obj bs = flatten(bb);
388
393
  for (size_t j = 0, K = bs->length(); j < K; ++j) {
389
394
  result->append(bs->at(j));
@@ -396,9 +401,9 @@ namespace Sass {
396
401
  return result;
397
402
  }
398
403
 
399
- std::vector<std::pair<bool, Block_Obj>> Cssize::slice_by_bubble(Block_Ptr b)
404
+ sass::vector<std::pair<bool, Block_Obj>> Cssize::slice_by_bubble(Block* b)
400
405
  {
401
- std::vector<std::pair<bool, Block_Obj>> results;
406
+ sass::vector<std::pair<bool, Block_Obj>> results;
402
407
 
403
408
  for (size_t i = 0, L = b->length(); i < L; ++i) {
404
409
  Statement_Obj value = b->at(i);
@@ -411,7 +416,7 @@ namespace Sass {
411
416
  }
412
417
  else
413
418
  {
414
- Block_Ptr wrapper_block = SASS_MEMORY_NEW(Block, value->pstate());
419
+ Block* wrapper_block = SASS_MEMORY_NEW(Block, value->pstate());
415
420
  wrapper_block->append(value);
416
421
  results.push_back(std::make_pair(key, wrapper_block));
417
422
  }
@@ -419,10 +424,10 @@ namespace Sass {
419
424
  return results;
420
425
  }
421
426
 
422
- Block_Ptr Cssize::debubble(Block_Ptr children, Statement_Ptr parent)
427
+ Block* Cssize::debubble(Block* children, Statement* parent)
423
428
  {
424
- Has_Block_Obj previous_parent = 0;
425
- std::vector<std::pair<bool, Block_Obj>> baz = slice_by_bubble(children);
429
+ ParentStatementObj previous_parent;
430
+ sass::vector<std::pair<bool, Block_Obj>> baz = slice_by_bubble(children);
426
431
  Block_Obj result = SASS_MEMORY_NEW(Block, children->pstate());
427
432
 
428
433
  for (size_t i = 0, L = baz.size(); i < L; ++i) {
@@ -437,7 +442,7 @@ namespace Sass {
437
442
  previous_parent->block()->concat(slice);
438
443
  }
439
444
  else {
440
- previous_parent = Cast<Has_Block>(SASS_MEMORY_COPY(parent));
445
+ previous_parent = SASS_MEMORY_COPY(parent);
441
446
  previous_parent->block(slice);
442
447
  previous_parent->tabs(parent->tabs());
443
448
 
@@ -448,36 +453,24 @@ namespace Sass {
448
453
 
449
454
  for (size_t j = 0, K = slice->length(); j < K; ++j)
450
455
  {
451
- Statement_Ptr ss;
456
+ Statement_Obj ss;
452
457
  Statement_Obj stm = slice->at(j);
453
458
  // this has to go now here (too bad)
454
459
  Bubble_Obj node = Cast<Bubble>(stm);
455
- Media_Block_Ptr m1 = NULL;
456
- Media_Block_Ptr m2 = NULL;
457
- if (parent) m1 = Cast<Media_Block>(parent);
458
- if (node) m2 = Cast<Media_Block>(node->node());
459
- if (!parent ||
460
- parent->statement_type() != Statement::MEDIA ||
461
- node->node()->statement_type() != Statement::MEDIA ||
462
- (m1 && m2 && *m1->media_queries() == *m2->media_queries())
463
- )
464
- {
465
- ss = node->node();
466
- }
467
- else
468
- {
469
- List_Obj mq = merge_media_queries(
470
- Cast<Media_Block>(node->node()),
471
- Cast<Media_Block>(parent)
472
- );
473
- if (!mq->length()) continue;
474
- if (Media_Block* b = Cast<Media_Block>(node->node())) {
475
- b->media_queries(mq);
476
- }
460
+
461
+ CssMediaRule* rule1 = NULL;
462
+ CssMediaRule* rule2 = NULL;
463
+ if (parent) rule1 = Cast<CssMediaRule>(parent);
464
+ if (node) rule2 = Cast<CssMediaRule>(node->node());
465
+ if (rule1 || rule2) {
477
466
  ss = node->node();
478
467
  }
479
468
 
480
- if (!ss) continue;
469
+ ss = node->node();
470
+
471
+ if (!ss) {
472
+ continue;
473
+ }
481
474
 
482
475
  ss->tabs(ss->tabs() + node->tabs());
483
476
  ss->group_end(node->group_end());
@@ -486,18 +479,19 @@ namespace Sass {
486
479
  children->pstate(),
487
480
  children->length(),
488
481
  children->is_root());
489
- bb->append(ss->perform(this));
482
+ auto evaled = ss->perform(this);
483
+ if (evaled) bb->append(evaled);
490
484
 
491
485
  Block_Obj wrapper_block = SASS_MEMORY_NEW(Block,
492
486
  children->pstate(),
493
487
  children->length(),
494
488
  children->is_root());
495
489
 
496
- Block_Ptr wrapper = flatten(bb);
490
+ Block* wrapper = flatten(bb);
497
491
  wrapper_block->append(wrapper);
498
492
 
499
493
  if (wrapper->length()) {
500
- previous_parent = NULL;
494
+ previous_parent = {};
501
495
  }
502
496
 
503
497
  if (wrapper_block) {
@@ -509,16 +503,11 @@ namespace Sass {
509
503
  return flatten(result);
510
504
  }
511
505
 
512
- Statement_Ptr Cssize::fallback_impl(AST_Node_Ptr n)
513
- {
514
- return static_cast<Statement_Ptr>(n);
515
- }
516
-
517
- void Cssize::append_block(Block_Ptr b, Block_Ptr cur)
506
+ void Cssize::append_block(Block* b, Block* cur)
518
507
  {
519
508
  for (size_t i = 0, L = b->length(); i < L; ++i) {
520
509
  Statement_Obj ith = b->at(i)->perform(this);
521
- if (Block_Ptr bb = Cast<Block>(ith)) {
510
+ if (Block_Obj bb = Cast<Block>(ith)) {
522
511
  for (size_t j = 0, K = bb->length(); j < K; ++j) {
523
512
  cur->append(bb->at(j));
524
513
  }
@@ -529,78 +518,4 @@ namespace Sass {
529
518
  }
530
519
  }
531
520
 
532
- List_Ptr Cssize::merge_media_queries(Media_Block_Ptr m1, Media_Block_Ptr m2)
533
- {
534
- List_Ptr qq = SASS_MEMORY_NEW(List,
535
- m1->media_queries()->pstate(),
536
- m1->media_queries()->length(),
537
- SASS_COMMA);
538
-
539
- for (size_t i = 0, L = m1->media_queries()->length(); i < L; i++) {
540
- for (size_t j = 0, K = m2->media_queries()->length(); j < K; j++) {
541
- Expression_Obj l1 = m1->media_queries()->at(i);
542
- Expression_Obj l2 = m2->media_queries()->at(j);
543
- Media_Query_Ptr mq1 = Cast<Media_Query>(l1);
544
- Media_Query_Ptr mq2 = Cast<Media_Query>(l2);
545
- Media_Query_Ptr mq = merge_media_query(mq1, mq2);
546
- if (mq) qq->append(mq);
547
- }
548
- }
549
-
550
- return qq;
551
- }
552
-
553
-
554
- Media_Query_Ptr Cssize::merge_media_query(Media_Query_Ptr mq1, Media_Query_Ptr mq2)
555
- {
556
-
557
- std::string type;
558
- std::string mod;
559
-
560
- std::string m1 = std::string(mq1->is_restricted() ? "only" : mq1->is_negated() ? "not" : "");
561
- std::string t1 = mq1->media_type() ? mq1->media_type()->to_string(ctx.c_options) : "";
562
- std::string m2 = std::string(mq2->is_restricted() ? "only" : mq1->is_negated() ? "not" : "");
563
- std::string t2 = mq2->media_type() ? mq2->media_type()->to_string(ctx.c_options) : "";
564
-
565
-
566
- if (t1.empty()) t1 = t2;
567
- if (t2.empty()) t2 = t1;
568
-
569
- if ((m1 == "not") ^ (m2 == "not")) {
570
- if (t1 == t2) {
571
- return 0;
572
- }
573
- type = m1 == "not" ? t2 : t1;
574
- mod = m1 == "not" ? m2 : m1;
575
- }
576
- else if (m1 == "not" && m2 == "not") {
577
- if (t1 != t2) {
578
- return 0;
579
- }
580
- type = t1;
581
- mod = "not";
582
- }
583
- else if (t1 != t2) {
584
- return 0;
585
- } else {
586
- type = t1;
587
- mod = m1.empty() ? m2 : m1;
588
- }
589
-
590
- Media_Query_Ptr mm = SASS_MEMORY_NEW(Media_Query,
591
- mq1->pstate(),
592
- 0,
593
- mq1->length() + mq2->length(),
594
- mod == "not",
595
- mod == "only");
596
-
597
- if (!type.empty()) {
598
- mm->media_type(SASS_MEMORY_NEW(String_Quoted, mq1->pstate(), type));
599
- }
600
-
601
- mm->concat(mq2);
602
- mm->concat(mq1);
603
-
604
- return mm;
605
- }
606
521
  }