sassc 2.0.1 → 2.1.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (200) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.gitmodules +1 -1
  4. data/.travis.yml +7 -3
  5. data/CHANGELOG.md +3 -0
  6. data/CODE_OF_CONDUCT.md +1 -1
  7. data/README.md +1 -1
  8. data/Rakefile +23 -8
  9. data/ext/extconf.rb +39 -0
  10. data/ext/libsass/.gitignore +1 -0
  11. data/ext/libsass/GNUmakefile.am +23 -39
  12. data/ext/libsass/Makefile +56 -91
  13. data/ext/libsass/Makefile.conf +16 -2
  14. data/ext/libsass/configure.ac +8 -12
  15. data/ext/libsass/include/sass/base.h +1 -0
  16. data/ext/libsass/include/sass/context.h +1 -1
  17. data/ext/libsass/src/GNUmakefile.am +1 -5
  18. data/ext/libsass/src/ast.cpp +747 -2010
  19. data/ext/libsass/src/ast.hpp +239 -2383
  20. data/ext/libsass/src/{to_c.cpp → ast2c.cpp} +22 -16
  21. data/ext/libsass/src/ast2c.hpp +39 -0
  22. data/ext/libsass/src/ast_def_macros.hpp +62 -10
  23. data/ext/libsass/src/ast_fwd_decl.cpp +1 -0
  24. data/ext/libsass/src/ast_fwd_decl.hpp +43 -165
  25. data/ext/libsass/src/ast_sel_cmp.cpp +909 -0
  26. data/ext/libsass/src/ast_sel_unify.cpp +280 -0
  27. data/ext/libsass/src/ast_selectors.cpp +1475 -0
  28. data/ext/libsass/src/ast_selectors.hpp +568 -0
  29. data/ext/libsass/src/ast_supports.cpp +130 -0
  30. data/ext/libsass/src/ast_supports.hpp +121 -0
  31. data/ext/libsass/src/ast_values.cpp +967 -0
  32. data/ext/libsass/src/ast_values.hpp +489 -0
  33. data/ext/libsass/src/backtrace.cpp +4 -0
  34. data/ext/libsass/src/base64vlq.cpp +3 -0
  35. data/ext/libsass/src/bind.cpp +18 -17
  36. data/ext/libsass/src/bind.hpp +3 -1
  37. data/ext/libsass/src/c2ast.cpp +64 -0
  38. data/ext/libsass/src/c2ast.hpp +14 -0
  39. data/ext/libsass/src/cencode.c +2 -2
  40. data/ext/libsass/src/check_nesting.cpp +52 -56
  41. data/ext/libsass/src/check_nesting.hpp +35 -34
  42. data/ext/libsass/src/color_maps.cpp +156 -153
  43. data/ext/libsass/src/color_maps.hpp +152 -152
  44. data/ext/libsass/src/constants.cpp +15 -0
  45. data/ext/libsass/src/constants.hpp +13 -0
  46. data/ext/libsass/src/context.cpp +24 -14
  47. data/ext/libsass/src/context.hpp +6 -6
  48. data/ext/libsass/src/cssize.cpp +69 -71
  49. data/ext/libsass/src/cssize.hpp +50 -50
  50. data/ext/libsass/src/debugger.hpp +117 -110
  51. data/ext/libsass/src/emitter.cpp +13 -12
  52. data/ext/libsass/src/emitter.hpp +13 -9
  53. data/ext/libsass/src/environment.cpp +15 -1
  54. data/ext/libsass/src/environment.hpp +6 -0
  55. data/ext/libsass/src/error_handling.cpp +36 -59
  56. data/ext/libsass/src/error_handling.hpp +29 -16
  57. data/ext/libsass/src/eval.cpp +302 -323
  58. data/ext/libsass/src/eval.hpp +64 -55
  59. data/ext/libsass/src/expand.cpp +94 -88
  60. data/ext/libsass/src/expand.hpp +33 -37
  61. data/ext/libsass/src/extend.cpp +38 -36
  62. data/ext/libsass/src/extend.hpp +15 -15
  63. data/ext/libsass/src/file.cpp +34 -2
  64. data/ext/libsass/src/fn_colors.cpp +594 -0
  65. data/ext/libsass/src/fn_colors.hpp +85 -0
  66. data/ext/libsass/src/fn_lists.cpp +284 -0
  67. data/ext/libsass/src/fn_lists.hpp +34 -0
  68. data/ext/libsass/src/fn_maps.cpp +94 -0
  69. data/ext/libsass/src/fn_maps.hpp +30 -0
  70. data/ext/libsass/src/fn_miscs.cpp +256 -0
  71. data/ext/libsass/src/fn_miscs.hpp +40 -0
  72. data/ext/libsass/src/fn_numbers.cpp +220 -0
  73. data/ext/libsass/src/fn_numbers.hpp +45 -0
  74. data/ext/libsass/src/fn_selectors.cpp +235 -0
  75. data/ext/libsass/src/fn_selectors.hpp +35 -0
  76. data/ext/libsass/src/fn_strings.cpp +254 -0
  77. data/ext/libsass/src/fn_strings.hpp +34 -0
  78. data/ext/libsass/src/fn_utils.cpp +156 -0
  79. data/ext/libsass/src/fn_utils.hpp +56 -0
  80. data/ext/libsass/src/inspect.cpp +101 -152
  81. data/ext/libsass/src/inspect.hpp +69 -73
  82. data/ext/libsass/src/json.cpp +2 -2
  83. data/ext/libsass/src/lexer.cpp +6 -3
  84. data/ext/libsass/src/listize.cpp +9 -11
  85. data/ext/libsass/src/listize.hpp +11 -7
  86. data/ext/libsass/src/memory/SharedPtr.cpp +2 -83
  87. data/ext/libsass/src/memory/SharedPtr.hpp +127 -143
  88. data/ext/libsass/src/node.cpp +13 -10
  89. data/ext/libsass/src/node.hpp +3 -3
  90. data/ext/libsass/src/operation.hpp +184 -144
  91. data/ext/libsass/src/operators.cpp +43 -17
  92. data/ext/libsass/src/operators.hpp +5 -5
  93. data/ext/libsass/src/output.cpp +21 -18
  94. data/ext/libsass/src/output.hpp +14 -21
  95. data/ext/libsass/src/parser.cpp +215 -183
  96. data/ext/libsass/src/parser.hpp +28 -24
  97. data/ext/libsass/src/plugins.cpp +5 -1
  98. data/ext/libsass/src/position.cpp +3 -0
  99. data/ext/libsass/src/prelexer.cpp +9 -3
  100. data/ext/libsass/src/prelexer.hpp +9 -9
  101. data/ext/libsass/src/remove_placeholders.cpp +14 -11
  102. data/ext/libsass/src/remove_placeholders.hpp +8 -9
  103. data/ext/libsass/src/sass.cpp +9 -3
  104. data/ext/libsass/src/sass.hpp +12 -9
  105. data/ext/libsass/src/sass2scss.cpp +45 -14
  106. data/ext/libsass/src/sass_context.cpp +18 -15
  107. data/ext/libsass/src/sass_functions.cpp +6 -3
  108. data/ext/libsass/src/sass_functions.hpp +1 -1
  109. data/ext/libsass/src/sass_util.cpp +3 -0
  110. data/ext/libsass/src/sass_values.cpp +21 -13
  111. data/ext/libsass/src/source_map.cpp +5 -2
  112. data/ext/libsass/src/source_map.hpp +2 -2
  113. data/ext/libsass/src/subset_map.cpp +4 -1
  114. data/ext/libsass/src/to_value.cpp +23 -21
  115. data/ext/libsass/src/to_value.hpp +18 -22
  116. data/ext/libsass/src/units.cpp +4 -0
  117. data/ext/libsass/src/units.hpp +1 -0
  118. data/ext/libsass/src/utf8/checked.h +12 -10
  119. data/ext/libsass/src/utf8/core.h +3 -0
  120. data/ext/libsass/src/utf8_string.cpp +3 -0
  121. data/ext/libsass/src/util.cpp +67 -75
  122. data/ext/libsass/src/util.hpp +64 -19
  123. data/ext/libsass/src/util_string.cpp +75 -0
  124. data/ext/libsass/src/util_string.hpp +19 -0
  125. data/ext/libsass/src/values.cpp +22 -13
  126. data/ext/libsass/src/values.hpp +2 -2
  127. data/ext/libsass/win/libsass.targets +30 -4
  128. data/ext/libsass/win/libsass.vcxproj.filters +82 -4
  129. data/lib/sassc.rb +24 -0
  130. data/lib/sassc/engine.rb +2 -2
  131. data/lib/sassc/native.rb +8 -1
  132. data/lib/sassc/version.rb +1 -1
  133. data/sassc.gemspec +19 -11
  134. data/test/engine_test.rb +26 -1
  135. data/test/native_test.rb +1 -1
  136. metadata +66 -72
  137. data/ext/Rakefile +0 -3
  138. data/ext/libsass/.github/CONTRIBUTING.md +0 -65
  139. data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
  140. data/ext/libsass/.travis.yml +0 -64
  141. data/ext/libsass/Readme.md +0 -104
  142. data/ext/libsass/SECURITY.md +0 -10
  143. data/ext/libsass/appveyor.yml +0 -91
  144. data/ext/libsass/docs/README.md +0 -20
  145. data/ext/libsass/docs/api-context-example.md +0 -45
  146. data/ext/libsass/docs/api-context-internal.md +0 -163
  147. data/ext/libsass/docs/api-context.md +0 -295
  148. data/ext/libsass/docs/api-doc.md +0 -215
  149. data/ext/libsass/docs/api-function-example.md +0 -67
  150. data/ext/libsass/docs/api-function-internal.md +0 -8
  151. data/ext/libsass/docs/api-function.md +0 -74
  152. data/ext/libsass/docs/api-importer-example.md +0 -112
  153. data/ext/libsass/docs/api-importer-internal.md +0 -20
  154. data/ext/libsass/docs/api-importer.md +0 -86
  155. data/ext/libsass/docs/api-value-example.md +0 -55
  156. data/ext/libsass/docs/api-value-internal.md +0 -76
  157. data/ext/libsass/docs/api-value.md +0 -154
  158. data/ext/libsass/docs/build-on-darwin.md +0 -27
  159. data/ext/libsass/docs/build-on-gentoo.md +0 -55
  160. data/ext/libsass/docs/build-on-windows.md +0 -139
  161. data/ext/libsass/docs/build-shared-library.md +0 -35
  162. data/ext/libsass/docs/build-with-autotools.md +0 -78
  163. data/ext/libsass/docs/build-with-makefiles.md +0 -68
  164. data/ext/libsass/docs/build-with-mingw.md +0 -107
  165. data/ext/libsass/docs/build-with-visual-studio.md +0 -90
  166. data/ext/libsass/docs/build.md +0 -97
  167. data/ext/libsass/docs/compatibility-plan.md +0 -48
  168. data/ext/libsass/docs/contributing.md +0 -17
  169. data/ext/libsass/docs/custom-functions-internal.md +0 -122
  170. data/ext/libsass/docs/dev-ast-memory.md +0 -223
  171. data/ext/libsass/docs/implementations.md +0 -56
  172. data/ext/libsass/docs/plugins.md +0 -47
  173. data/ext/libsass/docs/setup-environment.md +0 -68
  174. data/ext/libsass/docs/source-map-internals.md +0 -51
  175. data/ext/libsass/docs/trace.md +0 -26
  176. data/ext/libsass/docs/triage.md +0 -17
  177. data/ext/libsass/docs/unicode.md +0 -39
  178. data/ext/libsass/extconf.rb +0 -6
  179. data/ext/libsass/script/bootstrap +0 -13
  180. data/ext/libsass/script/branding +0 -10
  181. data/ext/libsass/script/ci-build-libsass +0 -134
  182. data/ext/libsass/script/ci-build-plugin +0 -62
  183. data/ext/libsass/script/ci-install-compiler +0 -6
  184. data/ext/libsass/script/ci-install-deps +0 -20
  185. data/ext/libsass/script/ci-report-coverage +0 -42
  186. data/ext/libsass/script/spec +0 -5
  187. data/ext/libsass/script/tap-driver +0 -652
  188. data/ext/libsass/script/tap-runner +0 -1
  189. data/ext/libsass/script/test-leaks.pl +0 -103
  190. data/ext/libsass/src/functions.cpp +0 -2234
  191. data/ext/libsass/src/functions.hpp +0 -198
  192. data/ext/libsass/src/to_c.hpp +0 -39
  193. data/ext/libsass/test/test_node.cpp +0 -94
  194. data/ext/libsass/test/test_paths.cpp +0 -28
  195. data/ext/libsass/test/test_selector_difference.cpp +0 -25
  196. data/ext/libsass/test/test_specificity.cpp +0 -25
  197. data/ext/libsass/test/test_subset_map.cpp +0 -472
  198. data/ext/libsass/test/test_superselector.cpp +0 -69
  199. data/ext/libsass/test/test_unification.cpp +0 -31
  200. data/lib/tasks/libsass.rb +0 -33
@@ -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 "constants.hpp"
3
6
 
4
7
  namespace Sass {
@@ -18,6 +21,15 @@ namespace Sass {
18
21
  extern const unsigned long Specificity_Pseudo = 1000;
19
22
  extern const unsigned long Specificity_ID = 1000000;
20
23
 
24
+ extern const int UnificationOrder_Element = 1;
25
+ extern const int UnificationOrder_Id = 2;
26
+ extern const int UnificationOrder_Class = 2;
27
+ extern const int UnificationOrder_Attribute = 3;
28
+ extern const int UnificationOrder_PseudoClass = 4;
29
+ extern const int UnificationOrder_Wrapped = 5;
30
+ extern const int UnificationOrder_PseudoElement = 6;
31
+ extern const int UnificationOrder_Placeholder = 7;
32
+
21
33
  // sass keywords
22
34
  extern const char at_root_kwd[] = "@at-root";
23
35
  extern const char import_kwd[] = "@import";
@@ -116,6 +128,9 @@ namespace Sass {
116
128
  extern const char true_kwd[] = "true";
117
129
  extern const char false_kwd[] = "false";
118
130
 
131
+ // definition keywords
132
+ extern const char using_kwd[] = "using";
133
+
119
134
  // miscellaneous punctuation and delimiters
120
135
  extern const char percent_str[] = "%";
121
136
  extern const char empty_str[] = "";
@@ -18,6 +18,16 @@ namespace Sass {
18
18
  extern const unsigned long Specificity_Pseudo;
19
19
  extern const unsigned long Specificity_ID;
20
20
 
21
+ // Selector unification order;
22
+ extern const int UnificationOrder_Element;
23
+ extern const int UnificationOrder_Id;
24
+ extern const int UnificationOrder_Class;
25
+ extern const int UnificationOrder_Attribute;
26
+ extern const int UnificationOrder_PseudoClass;
27
+ extern const int UnificationOrder_Wrapped;
28
+ extern const int UnificationOrder_PseudoElement;
29
+ extern const int UnificationOrder_Placeholder;
30
+
21
31
  // sass keywords
22
32
  extern const char at_root_kwd[];
23
33
  extern const char import_kwd[];
@@ -117,6 +127,9 @@ namespace Sass {
117
127
  extern const char true_kwd[];
118
128
  extern const char false_kwd[];
119
129
 
130
+ // definition keywords
131
+ extern const char using_kwd[];
132
+
120
133
  // miscellaneous punctuation and delimiters
121
134
  extern const char percent_str[];
122
135
  extern const char empty_str[];
@@ -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 <string>
3
6
  #include <cstdlib>
4
7
  #include <cstring>
@@ -23,12 +26,19 @@
23
26
  #include "listize.hpp"
24
27
  #include "extend.hpp"
25
28
  #include "remove_placeholders.hpp"
26
- #include "functions.hpp"
27
29
  #include "sass_functions.hpp"
28
30
  #include "backtrace.hpp"
29
31
  #include "sass2scss.h"
30
32
  #include "prelexer.hpp"
31
33
  #include "emitter.hpp"
34
+ #include "fn_utils.hpp"
35
+ #include "fn_miscs.hpp"
36
+ #include "fn_maps.hpp"
37
+ #include "fn_lists.hpp"
38
+ #include "fn_colors.hpp"
39
+ #include "fn_numbers.hpp"
40
+ #include "fn_strings.hpp"
41
+ #include "fn_selectors.hpp"
32
42
 
33
43
  namespace Sass {
34
44
  using namespace Constants;
@@ -382,7 +392,7 @@ namespace Sass {
382
392
 
383
393
  }
384
394
 
385
- void Context::import_url (Import_Ptr imp, std::string load_path, const std::string& ctx_path) {
395
+ void Context::import_url (Import* imp, std::string load_path, const std::string& ctx_path) {
386
396
 
387
397
  ParserState pstate(imp->pstate());
388
398
  std::string imp_path(unquote(load_path));
@@ -401,11 +411,11 @@ namespace Sass {
401
411
  imp->urls().push_back(SASS_MEMORY_NEW(String_Quoted, imp->pstate(), load_path));
402
412
  }
403
413
  else if (imp_path.length() > 4 && imp_path.substr(imp_path.length() - 4, 4) == ".css") {
404
- String_Constant_Ptr loc = SASS_MEMORY_NEW(String_Constant, pstate, unquote(load_path));
414
+ String_Constant* loc = SASS_MEMORY_NEW(String_Constant, pstate, unquote(load_path));
405
415
  Argument_Obj loc_arg = SASS_MEMORY_NEW(Argument, pstate, loc);
406
416
  Arguments_Obj loc_args = SASS_MEMORY_NEW(Arguments, pstate);
407
417
  loc_args->append(loc_arg);
408
- Function_Call_Ptr new_url = SASS_MEMORY_NEW(Function_Call, pstate, "url", loc_args);
418
+ Function_Call* new_url = SASS_MEMORY_NEW(Function_Call, pstate, std::string("url"), loc_args);
409
419
  imp->urls().push_back(new_url);
410
420
  }
411
421
  else {
@@ -421,7 +431,7 @@ namespace Sass {
421
431
 
422
432
 
423
433
  // call custom importers on the given (unquoted) load_path and eventually parse the resulting style_sheet
424
- bool Context::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)
434
+ bool Context::call_loader(const std::string& load_path, const char* ctx_path, ParserState& pstate, Import* imp, std::vector<Sass_Importer_Entry> importers, bool only_one)
425
435
  {
426
436
  // unique counter
427
437
  size_t count = 0;
@@ -556,7 +566,7 @@ namespace Sass {
556
566
  {
557
567
 
558
568
  // check if entry file is given
559
- if (input_path.empty()) return 0;
569
+ if (input_path.empty()) return {};
560
570
 
561
571
  // create absolute path from input filename
562
572
  // ToDo: this should be resolved via custom importers
@@ -602,7 +612,7 @@ namespace Sass {
602
612
  {
603
613
 
604
614
  // check if source string is given
605
- if (!source_c_str) return 0;
615
+ if (!source_c_str) return {};
606
616
 
607
617
  // convert indented sass syntax
608
618
  if(c_options.is_indented_syntax_src) {
@@ -645,11 +655,11 @@ namespace Sass {
645
655
  Block_Obj Context::compile()
646
656
  {
647
657
  // abort if there is no data
648
- if (resources.size() == 0) return 0;
658
+ if (resources.size() == 0) return {};
649
659
  // get root block from the first style sheet
650
660
  Block_Obj root = sheets.at(entry_path).root;
651
661
  // abort on invalid root
652
- if (root.isNull()) return 0;
662
+ if (root.isNull()) return {};
653
663
  Env global; // create root environment
654
664
  // register built-in functions on env
655
665
  register_built_in_functions(*this, &global);
@@ -732,14 +742,14 @@ namespace Sass {
732
742
 
733
743
  void register_function(Context& ctx, Signature sig, Native_Function f, Env* env)
734
744
  {
735
- Definition_Ptr def = make_native_function(sig, f, ctx);
745
+ Definition* def = make_native_function(sig, f, ctx);
736
746
  def->environment(env);
737
747
  (*env)[def->name() + "[f]"] = def;
738
748
  }
739
749
 
740
750
  void register_function(Context& ctx, Signature sig, Native_Function f, size_t arity, Env* env)
741
751
  {
742
- Definition_Ptr def = make_native_function(sig, f, ctx);
752
+ Definition* def = make_native_function(sig, f, ctx);
743
753
  std::stringstream ss;
744
754
  ss << def->name() << "[f]" << arity;
745
755
  def->environment(env);
@@ -748,11 +758,11 @@ namespace Sass {
748
758
 
749
759
  void register_overload_stub(Context& ctx, std::string name, Env* env)
750
760
  {
751
- Definition_Ptr stub = SASS_MEMORY_NEW(Definition,
761
+ Definition* stub = SASS_MEMORY_NEW(Definition,
752
762
  ParserState("[built-in function]"),
753
763
  0,
754
764
  name,
755
- 0,
765
+ {},
756
766
  0,
757
767
  true);
758
768
  (*env)[name + "[f]"] = stub;
@@ -872,7 +882,7 @@ namespace Sass {
872
882
  }
873
883
  void register_c_function(Context& ctx, Env* env, Sass_Function_Entry descr)
874
884
  {
875
- Definition_Ptr def = make_c_function(descr, ctx);
885
+ Definition* def = make_c_function(descr, ctx);
876
886
  def->environment(env);
877
887
  (*env)[def->name() + "[f]"] = def;
878
888
  }
@@ -27,14 +27,14 @@ namespace Sass {
27
27
 
28
28
  class Context {
29
29
  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)
30
+ void import_url (Import* 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* imp)
32
32
  { 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)
33
+ bool call_importers(const std::string& load_path, const char* ctx_path, ParserState& pstate, Import* imp)
34
34
  { return call_loader(load_path, ctx_path, pstate, imp, c_importers, true); };
35
35
 
36
36
  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);
37
+ bool call_loader(const std::string& load_path, const char* ctx_path, ParserState& pstate, Import* imp, std::vector<Sass_Importer_Entry> importers, bool only_one = true);
38
38
 
39
39
  public:
40
40
  const std::string CWD;
@@ -46,14 +46,14 @@ namespace Sass {
46
46
 
47
47
  // generic ast node garbage container
48
48
  // used to avoid possible circular refs
49
- std::vector<AST_Node_Obj> ast_gc;
49
+ CallStack ast_gc;
50
50
  // resources add under our control
51
51
  // these are guaranteed to be freed
52
52
  std::vector<char*> strings;
53
53
  std::vector<Resource> resources;
54
54
  std::map<const std::string, StyleSheet> sheets;
55
55
  Subset_Map subset_map;
56
- std::vector<Sass_Import_Entry> import_stack;
56
+ ImporterStack import_stack;
57
57
  std::vector<Sass_Callee> callee_stack;
58
58
  std::vector<Backtrace> traces;
59
59
 
@@ -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>
@@ -11,16 +14,16 @@ namespace Sass {
11
14
  Cssize::Cssize(Context& ctx)
12
15
  : ctx(ctx),
13
16
  traces(ctx.traces),
14
- block_stack(std::vector<Block_Ptr>()),
15
- p_stack(std::vector<Statement_Ptr>())
17
+ block_stack(BlockStack()),
18
+ p_stack(std::vector<Statement*>())
16
19
  { }
17
20
 
18
- Statement_Ptr Cssize::parent()
21
+ Statement* Cssize::parent()
19
22
  {
20
23
  return p_stack.size() ? p_stack.back() : block_stack.front();
21
24
  }
22
25
 
23
- Block_Ptr Cssize::operator()(Block_Ptr b)
26
+ Block* Cssize::operator()(Block* b)
24
27
  {
25
28
  Block_Obj bb = SASS_MEMORY_NEW(Block, b->pstate(), b->length(), b->is_root());
26
29
  // bb->tabs(b->tabs());
@@ -30,7 +33,7 @@ namespace Sass {
30
33
  return bb.detach();
31
34
  }
32
35
 
33
- Statement_Ptr Cssize::operator()(Trace_Ptr t)
36
+ Statement* Cssize::operator()(Trace* t)
34
37
  {
35
38
  traces.push_back(Backtrace(t->pstate()));
36
39
  auto result = t->block()->perform(this);
@@ -38,11 +41,11 @@ namespace Sass {
38
41
  return result;
39
42
  }
40
43
 
41
- Statement_Ptr Cssize::operator()(Declaration_Ptr d)
44
+ Statement* Cssize::operator()(Declaration* d)
42
45
  {
43
46
  String_Obj property = Cast<String>(d->property());
44
47
 
45
- if (Declaration_Ptr dd = Cast<Declaration>(parent())) {
48
+ if (Declaration* dd = Cast<Declaration>(parent())) {
46
49
  String_Obj parent_property = Cast<String>(dd->property());
47
50
  property = SASS_MEMORY_NEW(String_Constant,
48
51
  d->property()->pstate(),
@@ -78,7 +81,7 @@ namespace Sass {
78
81
  return 0;
79
82
  }
80
83
 
81
- Statement_Ptr Cssize::operator()(Directive_Ptr r)
84
+ Statement* Cssize::operator()(Directive* r)
82
85
  {
83
86
  if (!r->block() || !r->block()->length()) return r;
84
87
 
@@ -110,10 +113,10 @@ namespace Sass {
110
113
 
111
114
  }
112
115
 
113
- Block_Ptr result = SASS_MEMORY_NEW(Block, rr->pstate());
116
+ Block* result = SASS_MEMORY_NEW(Block, rr->pstate());
114
117
  if (!(directive_exists || rr->is_keyframes()))
115
118
  {
116
- Directive_Ptr empty_node = Cast<Directive>(rr);
119
+ Directive* empty_node = Cast<Directive>(rr);
117
120
  empty_node->block(SASS_MEMORY_NEW(Block, rr->block() ? rr->block()->pstate() : rr->pstate()));
118
121
  result->append(empty_node);
119
122
  }
@@ -128,7 +131,7 @@ namespace Sass {
128
131
  return result;
129
132
  }
130
133
 
131
- Statement_Ptr Cssize::operator()(Keyframe_Rule_Ptr r)
134
+ Statement* Cssize::operator()(Keyframe_Rule* r)
132
135
  {
133
136
  if (!r->block() || !r->block()->length()) return r;
134
137
 
@@ -140,14 +143,14 @@ namespace Sass {
140
143
  return debubble(rr->block(), rr);
141
144
  }
142
145
 
143
- Statement_Ptr Cssize::operator()(Ruleset_Ptr r)
146
+ Statement* Cssize::operator()(Ruleset* r)
144
147
  {
145
148
  p_stack.push_back(r);
146
149
  // this can return a string schema
147
150
  // string schema is not a statement!
148
151
  // r->block() is already a string schema
149
152
  // and that is comming from propset expand
150
- Block_Ptr bb = operator()(r->block());
153
+ Block* bb = operator()(r->block());
151
154
  // this should protect us (at least a bit) from our mess
152
155
  // fixing this properly is harder that it should be ...
153
156
  if (Cast<Statement>(bb) == NULL) {
@@ -167,10 +170,10 @@ namespace Sass {
167
170
  }
168
171
 
169
172
  Block_Obj props = SASS_MEMORY_NEW(Block, rr->block()->pstate());
170
- Block_Ptr rules = SASS_MEMORY_NEW(Block, rr->block()->pstate());
173
+ Block* rules = SASS_MEMORY_NEW(Block, rr->block()->pstate());
171
174
  for (size_t i = 0, L = rr->block()->length(); i < L; i++)
172
175
  {
173
- Statement_Ptr s = rr->block()->at(i);
176
+ Statement* s = rr->block()->at(i);
174
177
  if (bubblable(s)) rules->append(s);
175
178
  if (!bubblable(s)) props->append(s);
176
179
  }
@@ -183,14 +186,14 @@ namespace Sass {
183
186
 
184
187
  for (size_t i = 0, L = rules->length(); i < L; i++)
185
188
  {
186
- Statement_Ptr stm = rules->at(i);
189
+ Statement* stm = rules->at(i);
187
190
  stm->tabs(stm->tabs() + 1);
188
191
  }
189
192
 
190
193
  rules->unshift(rr);
191
194
  }
192
195
 
193
- Block_Ptr ptr = rules;
196
+ Block* ptr = rules;
194
197
  rules = debubble(rules);
195
198
  void* lp = ptr;
196
199
  void* rp = rules;
@@ -207,12 +210,12 @@ namespace Sass {
207
210
  return rules;
208
211
  }
209
212
 
210
- Statement_Ptr Cssize::operator()(Null_Ptr m)
213
+ Statement* Cssize::operator()(Null* m)
211
214
  {
212
215
  return 0;
213
216
  }
214
217
 
215
- Statement_Ptr Cssize::operator()(Media_Block_Ptr m)
218
+ Statement* Cssize::operator()(Media_Block* m)
216
219
  {
217
220
  if (parent()->statement_type() == Statement::RULESET)
218
221
  { return bubble(m); }
@@ -233,7 +236,7 @@ namespace Sass {
233
236
  return debubble(mm->block(), mm);
234
237
  }
235
238
 
236
- Statement_Ptr Cssize::operator()(Supports_Block_Ptr m)
239
+ Statement* Cssize::operator()(Supports_Block* m)
237
240
  {
238
241
  if (!m->block()->length())
239
242
  { return m; }
@@ -254,17 +257,17 @@ namespace Sass {
254
257
  return debubble(mm->block(), mm);
255
258
  }
256
259
 
257
- Statement_Ptr Cssize::operator()(At_Root_Block_Ptr m)
260
+ Statement* Cssize::operator()(At_Root_Block* m)
258
261
  {
259
262
  bool tmp = false;
260
263
  for (size_t i = 0, L = p_stack.size(); i < L; ++i) {
261
- Statement_Ptr s = p_stack[i];
264
+ Statement* s = p_stack[i];
262
265
  tmp |= m->exclude_node(s);
263
266
  }
264
267
 
265
268
  if (!tmp && m->block())
266
269
  {
267
- Block_Ptr bb = operator()(m->block());
270
+ Block* bb = operator()(m->block());
268
271
  for (size_t i = 0, L = bb->length(); i < L; ++i) {
269
272
  // (bb->elements())[i]->tabs(m->tabs());
270
273
  Statement_Obj stm = bb->at(i);
@@ -282,9 +285,9 @@ namespace Sass {
282
285
  return bubble(m);
283
286
  }
284
287
 
285
- Statement_Ptr Cssize::bubble(Directive_Ptr m)
288
+ Statement* Cssize::bubble(Directive* m)
286
289
  {
287
- Block_Ptr bb = SASS_MEMORY_NEW(Block, this->parent()->pstate());
290
+ Block* bb = SASS_MEMORY_NEW(Block, this->parent()->pstate());
288
291
  Has_Block_Obj new_rule = Cast<Has_Block>(SASS_MEMORY_COPY(this->parent()));
289
292
  new_rule->block(bb);
290
293
  new_rule->tabs(this->parent()->tabs());
@@ -299,16 +302,16 @@ namespace Sass {
299
302
  wrapper_block);
300
303
  if (m->value()) mm->value(m->value());
301
304
 
302
- Bubble_Ptr bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
305
+ Bubble* bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
303
306
  return bubble;
304
307
  }
305
308
 
306
- Statement_Ptr Cssize::bubble(At_Root_Block_Ptr m)
309
+ Statement* Cssize::bubble(At_Root_Block* m)
307
310
  {
308
311
  if (!m || !m->block()) return NULL;
309
- Block_Ptr bb = SASS_MEMORY_NEW(Block, this->parent()->pstate());
312
+ Block* bb = SASS_MEMORY_NEW(Block, this->parent()->pstate());
310
313
  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* wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
312
315
  if (new_rule) {
313
316
  new_rule->block(bb);
314
317
  new_rule->tabs(this->parent()->tabs());
@@ -316,52 +319,52 @@ namespace Sass {
316
319
  wrapper_block->append(new_rule);
317
320
  }
318
321
 
319
- At_Root_Block_Ptr mm = SASS_MEMORY_NEW(At_Root_Block,
322
+ At_Root_Block* mm = SASS_MEMORY_NEW(At_Root_Block,
320
323
  m->pstate(),
321
324
  wrapper_block,
322
325
  m->expression());
323
- Bubble_Ptr bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
326
+ Bubble* bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
324
327
  return bubble;
325
328
  }
326
329
 
327
- Statement_Ptr Cssize::bubble(Supports_Block_Ptr m)
330
+ Statement* Cssize::bubble(Supports_Block* m)
328
331
  {
329
332
  Ruleset_Obj parent = Cast<Ruleset>(SASS_MEMORY_COPY(this->parent()));
330
333
 
331
- Block_Ptr bb = SASS_MEMORY_NEW(Block, parent->block()->pstate());
332
- Ruleset_Ptr new_rule = SASS_MEMORY_NEW(Ruleset,
334
+ Block* bb = SASS_MEMORY_NEW(Block, parent->block()->pstate());
335
+ Ruleset* new_rule = SASS_MEMORY_NEW(Ruleset,
333
336
  parent->pstate(),
334
337
  parent->selector(),
335
338
  bb);
336
339
  new_rule->tabs(parent->tabs());
337
340
  new_rule->block()->concat(m->block());
338
341
 
339
- Block_Ptr wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
342
+ Block* wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
340
343
  wrapper_block->append(new_rule);
341
- Supports_Block_Ptr mm = SASS_MEMORY_NEW(Supports_Block,
344
+ Supports_Block* mm = SASS_MEMORY_NEW(Supports_Block,
342
345
  m->pstate(),
343
346
  m->condition(),
344
347
  wrapper_block);
345
348
 
346
349
  mm->tabs(m->tabs());
347
350
 
348
- Bubble_Ptr bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
351
+ Bubble* bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
349
352
  return bubble;
350
353
  }
351
354
 
352
- Statement_Ptr Cssize::bubble(Media_Block_Ptr m)
355
+ Statement* Cssize::bubble(Media_Block* m)
353
356
  {
354
357
  Ruleset_Obj parent = Cast<Ruleset>(SASS_MEMORY_COPY(this->parent()));
355
358
 
356
- Block_Ptr bb = SASS_MEMORY_NEW(Block, parent->block()->pstate());
357
- Ruleset_Ptr new_rule = SASS_MEMORY_NEW(Ruleset,
359
+ Block* bb = SASS_MEMORY_NEW(Block, parent->block()->pstate());
360
+ Ruleset* new_rule = SASS_MEMORY_NEW(Ruleset,
358
361
  parent->pstate(),
359
362
  parent->selector(),
360
363
  bb);
361
364
  new_rule->tabs(parent->tabs());
362
365
  new_rule->block()->concat(m->block());
363
366
 
364
- Block_Ptr wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
367
+ Block* wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
365
368
  wrapper_block->append(new_rule);
366
369
  Media_Block_Obj mm = SASS_MEMORY_NEW(Media_Block,
367
370
  m->pstate(),
@@ -373,17 +376,17 @@ namespace Sass {
373
376
  return SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
374
377
  }
375
378
 
376
- bool Cssize::bubblable(Statement_Ptr s)
379
+ bool Cssize::bubblable(Statement* s)
377
380
  {
378
381
  return Cast<Ruleset>(s) || s->bubbles();
379
382
  }
380
383
 
381
- Block_Ptr Cssize::flatten(Block_Ptr b)
384
+ Block* Cssize::flatten(Block* b)
382
385
  {
383
- Block_Ptr result = SASS_MEMORY_NEW(Block, b->pstate(), 0, b->is_root());
386
+ Block* result = SASS_MEMORY_NEW(Block, b->pstate(), 0, b->is_root());
384
387
  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)) {
388
+ Statement* ss = b->at(i);
389
+ if (Block* bb = Cast<Block>(ss)) {
387
390
  Block_Obj bs = flatten(bb);
388
391
  for (size_t j = 0, K = bs->length(); j < K; ++j) {
389
392
  result->append(bs->at(j));
@@ -396,7 +399,7 @@ namespace Sass {
396
399
  return result;
397
400
  }
398
401
 
399
- std::vector<std::pair<bool, Block_Obj>> Cssize::slice_by_bubble(Block_Ptr b)
402
+ std::vector<std::pair<bool, Block_Obj>> Cssize::slice_by_bubble(Block* b)
400
403
  {
401
404
  std::vector<std::pair<bool, Block_Obj>> results;
402
405
 
@@ -411,7 +414,7 @@ namespace Sass {
411
414
  }
412
415
  else
413
416
  {
414
- Block_Ptr wrapper_block = SASS_MEMORY_NEW(Block, value->pstate());
417
+ Block* wrapper_block = SASS_MEMORY_NEW(Block, value->pstate());
415
418
  wrapper_block->append(value);
416
419
  results.push_back(std::make_pair(key, wrapper_block));
417
420
  }
@@ -419,9 +422,9 @@ namespace Sass {
419
422
  return results;
420
423
  }
421
424
 
422
- Block_Ptr Cssize::debubble(Block_Ptr children, Statement_Ptr parent)
425
+ Block* Cssize::debubble(Block* children, Statement* parent)
423
426
  {
424
- Has_Block_Obj previous_parent = 0;
427
+ Has_Block_Obj previous_parent;
425
428
  std::vector<std::pair<bool, Block_Obj>> baz = slice_by_bubble(children);
426
429
  Block_Obj result = SASS_MEMORY_NEW(Block, children->pstate());
427
430
 
@@ -448,12 +451,12 @@ namespace Sass {
448
451
 
449
452
  for (size_t j = 0, K = slice->length(); j < K; ++j)
450
453
  {
451
- Statement_Ptr ss;
454
+ Statement* ss;
452
455
  Statement_Obj stm = slice->at(j);
453
456
  // this has to go now here (too bad)
454
457
  Bubble_Obj node = Cast<Bubble>(stm);
455
- Media_Block_Ptr m1 = NULL;
456
- Media_Block_Ptr m2 = NULL;
458
+ Media_Block* m1 = NULL;
459
+ Media_Block* m2 = NULL;
457
460
  if (parent) m1 = Cast<Media_Block>(parent);
458
461
  if (node) m2 = Cast<Media_Block>(node->node());
459
462
  if (!parent ||
@@ -493,11 +496,11 @@ namespace Sass {
493
496
  children->length(),
494
497
  children->is_root());
495
498
 
496
- Block_Ptr wrapper = flatten(bb);
499
+ Block* wrapper = flatten(bb);
497
500
  wrapper_block->append(wrapper);
498
501
 
499
502
  if (wrapper->length()) {
500
- previous_parent = NULL;
503
+ previous_parent = {};
501
504
  }
502
505
 
503
506
  if (wrapper_block) {
@@ -509,16 +512,11 @@ namespace Sass {
509
512
  return flatten(result);
510
513
  }
511
514
 
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)
515
+ void Cssize::append_block(Block* b, Block* cur)
518
516
  {
519
517
  for (size_t i = 0, L = b->length(); i < L; ++i) {
520
518
  Statement_Obj ith = b->at(i)->perform(this);
521
- if (Block_Ptr bb = Cast<Block>(ith)) {
519
+ if (Block* bb = Cast<Block>(ith)) {
522
520
  for (size_t j = 0, K = bb->length(); j < K; ++j) {
523
521
  cur->append(bb->at(j));
524
522
  }
@@ -529,9 +527,9 @@ namespace Sass {
529
527
  }
530
528
  }
531
529
 
532
- List_Ptr Cssize::merge_media_queries(Media_Block_Ptr m1, Media_Block_Ptr m2)
530
+ List* Cssize::merge_media_queries(Media_Block* m1, Media_Block* m2)
533
531
  {
534
- List_Ptr qq = SASS_MEMORY_NEW(List,
532
+ List* qq = SASS_MEMORY_NEW(List,
535
533
  m1->media_queries()->pstate(),
536
534
  m1->media_queries()->length(),
537
535
  SASS_COMMA);
@@ -540,9 +538,9 @@ namespace Sass {
540
538
  for (size_t j = 0, K = m2->media_queries()->length(); j < K; j++) {
541
539
  Expression_Obj l1 = m1->media_queries()->at(i);
542
540
  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);
541
+ Media_Query* mq1 = Cast<Media_Query>(l1);
542
+ Media_Query* mq2 = Cast<Media_Query>(l2);
543
+ Media_Query* mq = merge_media_query(mq1, mq2);
546
544
  if (mq) qq->append(mq);
547
545
  }
548
546
  }
@@ -551,7 +549,7 @@ namespace Sass {
551
549
  }
552
550
 
553
551
 
554
- Media_Query_Ptr Cssize::merge_media_query(Media_Query_Ptr mq1, Media_Query_Ptr mq2)
552
+ Media_Query* Cssize::merge_media_query(Media_Query* mq1, Media_Query* mq2)
555
553
  {
556
554
 
557
555
  std::string type;
@@ -559,7 +557,7 @@ namespace Sass {
559
557
 
560
558
  std::string m1 = std::string(mq1->is_restricted() ? "only" : mq1->is_negated() ? "not" : "");
561
559
  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" : "");
560
+ std::string m2 = std::string(mq2->is_restricted() ? "only" : mq2->is_negated() ? "not" : "");
563
561
  std::string t2 = mq2->media_type() ? mq2->media_type()->to_string(ctx.c_options) : "";
564
562
 
565
563
 
@@ -587,9 +585,9 @@ namespace Sass {
587
585
  mod = m1.empty() ? m2 : m1;
588
586
  }
589
587
 
590
- Media_Query_Ptr mm = SASS_MEMORY_NEW(Media_Query,
588
+ Media_Query* mm = SASS_MEMORY_NEW(Media_Query,
591
589
  mq1->pstate(),
592
- 0,
590
+ {},
593
591
  mq1->length() + mq2->length(),
594
592
  mod == "not",
595
593
  mod == "only");