sassc 2.0.1 → 2.1.0.pre1

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 (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
@@ -13,90 +13,86 @@ namespace Sass {
13
13
  // import all the class-specific methods and override as desired
14
14
  using Operation_CRTP<void, Inspect>::operator();
15
15
 
16
- void fallback_impl(AST_Node_Ptr n);
17
-
18
16
  public:
19
17
 
20
18
  Inspect(const Emitter& emi);
21
19
  virtual ~Inspect();
22
20
 
23
21
  // statements
24
- virtual void operator()(Block_Ptr);
25
- virtual void operator()(Ruleset_Ptr);
26
- virtual void operator()(Bubble_Ptr);
27
- virtual void operator()(Supports_Block_Ptr);
28
- virtual void operator()(Media_Block_Ptr);
29
- virtual void operator()(At_Root_Block_Ptr);
30
- virtual void operator()(Directive_Ptr);
31
- virtual void operator()(Keyframe_Rule_Ptr);
32
- virtual void operator()(Declaration_Ptr);
33
- virtual void operator()(Assignment_Ptr);
34
- virtual void operator()(Import_Ptr);
35
- virtual void operator()(Import_Stub_Ptr);
36
- virtual void operator()(Warning_Ptr);
37
- virtual void operator()(Error_Ptr);
38
- virtual void operator()(Debug_Ptr);
39
- virtual void operator()(Comment_Ptr);
40
- virtual void operator()(If_Ptr);
41
- virtual void operator()(For_Ptr);
42
- virtual void operator()(Each_Ptr);
43
- virtual void operator()(While_Ptr);
44
- virtual void operator()(Return_Ptr);
45
- virtual void operator()(Extension_Ptr);
46
- virtual void operator()(Definition_Ptr);
47
- virtual void operator()(Mixin_Call_Ptr);
48
- virtual void operator()(Content_Ptr);
22
+ virtual void operator()(Block*);
23
+ virtual void operator()(Ruleset*);
24
+ virtual void operator()(Bubble*);
25
+ virtual void operator()(Supports_Block*);
26
+ virtual void operator()(Media_Block*);
27
+ virtual void operator()(At_Root_Block*);
28
+ virtual void operator()(Directive*);
29
+ virtual void operator()(Keyframe_Rule*);
30
+ virtual void operator()(Declaration*);
31
+ virtual void operator()(Assignment*);
32
+ virtual void operator()(Import*);
33
+ virtual void operator()(Import_Stub*);
34
+ virtual void operator()(Warning*);
35
+ virtual void operator()(Error*);
36
+ virtual void operator()(Debug*);
37
+ virtual void operator()(Comment*);
38
+ virtual void operator()(If*);
39
+ virtual void operator()(For*);
40
+ virtual void operator()(Each*);
41
+ virtual void operator()(While*);
42
+ virtual void operator()(Return*);
43
+ virtual void operator()(Extension*);
44
+ virtual void operator()(Definition*);
45
+ virtual void operator()(Mixin_Call*);
46
+ virtual void operator()(Content*);
49
47
  // expressions
50
- virtual void operator()(Map_Ptr);
51
- virtual void operator()(Function_Ptr);
52
- virtual void operator()(List_Ptr);
53
- virtual void operator()(Binary_Expression_Ptr);
54
- virtual void operator()(Unary_Expression_Ptr);
55
- virtual void operator()(Function_Call_Ptr);
56
- virtual void operator()(Function_Call_Schema_Ptr);
57
- // virtual void operator()(Custom_Warning_Ptr);
58
- // virtual void operator()(Custom_Error_Ptr);
59
- virtual void operator()(Variable_Ptr);
60
- virtual void operator()(Number_Ptr);
61
- virtual void operator()(Color_Ptr);
62
- virtual void operator()(Boolean_Ptr);
63
- virtual void operator()(String_Schema_Ptr);
64
- virtual void operator()(String_Constant_Ptr);
65
- virtual void operator()(String_Quoted_Ptr);
66
- virtual void operator()(Custom_Error_Ptr);
67
- virtual void operator()(Custom_Warning_Ptr);
68
- virtual void operator()(Supports_Operator_Ptr);
69
- virtual void operator()(Supports_Negation_Ptr);
70
- virtual void operator()(Supports_Declaration_Ptr);
71
- virtual void operator()(Supports_Interpolation_Ptr);
72
- virtual void operator()(Media_Query_Ptr);
73
- virtual void operator()(Media_Query_Expression_Ptr);
74
- virtual void operator()(At_Root_Query_Ptr);
75
- virtual void operator()(Null_Ptr);
76
- virtual void operator()(Parent_Selector_Ptr p);
48
+ virtual void operator()(Map*);
49
+ virtual void operator()(Function*);
50
+ virtual void operator()(List*);
51
+ virtual void operator()(Binary_Expression*);
52
+ virtual void operator()(Unary_Expression*);
53
+ virtual void operator()(Function_Call*);
54
+ // virtual void operator()(Custom_Warning*);
55
+ // virtual void operator()(Custom_Error*);
56
+ virtual void operator()(Variable*);
57
+ virtual void operator()(Number*);
58
+ virtual void operator()(Color_RGBA*);
59
+ virtual void operator()(Color_HSLA*);
60
+ virtual void operator()(Boolean*);
61
+ virtual void operator()(String_Schema*);
62
+ virtual void operator()(String_Constant*);
63
+ virtual void operator()(String_Quoted*);
64
+ virtual void operator()(Custom_Error*);
65
+ virtual void operator()(Custom_Warning*);
66
+ virtual void operator()(Supports_Operator*);
67
+ virtual void operator()(Supports_Negation*);
68
+ virtual void operator()(Supports_Declaration*);
69
+ virtual void operator()(Supports_Interpolation*);
70
+ virtual void operator()(Media_Query*);
71
+ virtual void operator()(Media_Query_Expression*);
72
+ virtual void operator()(At_Root_Query*);
73
+ virtual void operator()(Null*);
74
+ virtual void operator()(Parent_Selector* p);
77
75
  // parameters and arguments
78
- virtual void operator()(Parameter_Ptr);
79
- virtual void operator()(Parameters_Ptr);
80
- virtual void operator()(Argument_Ptr);
81
- virtual void operator()(Arguments_Ptr);
76
+ virtual void operator()(Parameter*);
77
+ virtual void operator()(Parameters*);
78
+ virtual void operator()(Argument*);
79
+ virtual void operator()(Arguments*);
82
80
  // selectors
83
- virtual void operator()(Selector_Schema_Ptr);
84
- virtual void operator()(Placeholder_Selector_Ptr);
85
- virtual void operator()(Element_Selector_Ptr);
86
- virtual void operator()(Class_Selector_Ptr);
87
- virtual void operator()(Id_Selector_Ptr);
88
- virtual void operator()(Attribute_Selector_Ptr);
89
- virtual void operator()(Pseudo_Selector_Ptr);
90
- virtual void operator()(Wrapped_Selector_Ptr);
91
- virtual void operator()(Compound_Selector_Ptr);
92
- virtual void operator()(Complex_Selector_Ptr);
93
- virtual void operator()(Selector_List_Ptr);
81
+ virtual void operator()(Selector_Schema*);
82
+ virtual void operator()(Placeholder_Selector*);
83
+ virtual void operator()(Type_Selector*);
84
+ virtual void operator()(Class_Selector*);
85
+ virtual void operator()(Id_Selector*);
86
+ virtual void operator()(Attribute_Selector*);
87
+ virtual void operator()(Pseudo_Selector*);
88
+ virtual void operator()(Wrapped_Selector*);
89
+ virtual void operator()(Compound_Selector*);
90
+ virtual void operator()(Complex_Selector*);
91
+ virtual void operator()(Selector_List*);
94
92
 
95
- virtual std::string lbracket(List_Ptr);
96
- virtual std::string rbracket(List_Ptr);
93
+ virtual std::string lbracket(List*);
94
+ virtual std::string rbracket(List*);
97
95
 
98
- // template <typename U>
99
- // void fallback(U x) { fallback_impl(reinterpret_cast<AST_Node_Ptr>(x)); }
100
96
  };
101
97
 
102
98
  }
@@ -402,7 +402,7 @@ char *json_encode_string(const char *str)
402
402
  try {
403
403
  emit_string(&sb, str);
404
404
  }
405
- catch (std::exception) {
405
+ catch (std::exception&) {
406
406
  sb_free(&sb);
407
407
  throw;
408
408
  }
@@ -421,7 +421,7 @@ char *json_stringify(const JsonNode *node, const char *space)
421
421
  else
422
422
  emit_value(&sb, node);
423
423
  }
424
- catch (std::exception) {
424
+ catch (std::exception&) {
425
425
  sb_free(&sb);
426
426
  throw;
427
427
  }
@@ -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 <cctype>
3
6
  #include <iostream>
4
7
  #include <iomanip>
@@ -150,11 +153,11 @@ namespace Sass {
150
153
  // Match word boundary (zero-width lookahead).
151
154
  const char* word_boundary(const char* src) { return is_character(*src) || *src == '#' ? 0 : src; }
152
155
 
153
- // Match linefeed /(?:\n|\r\n?)/
156
+ // Match linefeed /(?:\n|\r\n?|\f)/
154
157
  const char* re_linebreak(const char* src)
155
158
  {
156
159
  // end of file or unix linefeed return here
157
- if (*src == 0 || *src == '\n') return src + 1;
160
+ if (*src == 0 || *src == '\n' || *src == '\f') return src + 1;
158
161
  // a carriage return may optionally be followed by a linefeed
159
162
  if (*src == '\r') return *(src + 1) == '\n' ? src + 2 : src + 1;
160
163
  // no linefeed
@@ -166,7 +169,7 @@ namespace Sass {
166
169
  const char* end_of_line(const char* src)
167
170
  {
168
171
  // end of file or unix linefeed return here
169
- return *src == 0 || *src == '\n' || *src == '\r' ? src : 0;
172
+ return *src == 0 || *src == '\n' || *src == '\r' || *src == '\f' ? src : 0;
170
173
  }
171
174
 
172
175
  // Assert end_of_file boundary (/\z/)
@@ -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 <string>
@@ -13,7 +16,7 @@ namespace Sass {
13
16
  Listize::Listize()
14
17
  { }
15
18
 
16
- Expression_Ptr Listize::operator()(Selector_List_Ptr sel)
19
+ Expression* Listize::operator()(Selector_List* sel)
17
20
  {
18
21
  List_Obj l = SASS_MEMORY_NEW(List, sel->pstate(), sel->length(), SASS_COMMA);
19
22
  l->from_selector(true);
@@ -25,24 +28,24 @@ namespace Sass {
25
28
  return SASS_MEMORY_NEW(Null, l->pstate());
26
29
  }
27
30
 
28
- Expression_Ptr Listize::operator()(Compound_Selector_Ptr sel)
31
+ Expression* Listize::operator()(Compound_Selector* sel)
29
32
  {
30
33
  std::string str;
31
34
  for (size_t i = 0, L = sel->length(); i < L; ++i) {
32
- Expression_Ptr e = (*sel)[i]->perform(this);
35
+ Expression* e = (*sel)[i]->perform(this);
33
36
  if (e) str += e->to_string();
34
37
  }
35
38
  return SASS_MEMORY_NEW(String_Quoted, sel->pstate(), str);
36
39
  }
37
40
 
38
- Expression_Ptr Listize::operator()(Complex_Selector_Ptr sel)
41
+ Expression* Listize::operator()(Complex_Selector* sel)
39
42
  {
40
43
  List_Obj l = SASS_MEMORY_NEW(List, sel->pstate(), 2);
41
44
  l->from_selector(true);
42
45
  Compound_Selector_Obj head = sel->head();
43
46
  if (head && !head->is_empty_reference())
44
47
  {
45
- Expression_Ptr hh = head->perform(this);
48
+ Expression* hh = head->perform(this);
46
49
  if (hh) l->append(hh);
47
50
  }
48
51
 
@@ -71,16 +74,11 @@ namespace Sass {
71
74
  if (tail)
72
75
  {
73
76
  Expression_Obj tt = tail->perform(this);
74
- if (List_Ptr ls = Cast<List>(tt))
77
+ if (List* ls = Cast<List>(tt))
75
78
  { l->concat(ls); }
76
79
  }
77
80
  if (l->length() == 0) return 0;
78
81
  return l.detach();
79
82
  }
80
83
 
81
- Expression_Ptr Listize::fallback_impl(AST_Node_Ptr n)
82
- {
83
- return Cast<Expression>(n);
84
- }
85
-
86
84
  }
@@ -1,6 +1,10 @@
1
1
  #ifndef SASS_LISTIZE_H
2
2
  #define SASS_LISTIZE_H
3
3
 
4
+ // sass.hpp must go before all system headers to get the
5
+ // __EXTENSIONS__ fix on Solaris.
6
+ #include "sass.hpp"
7
+
4
8
  #include <vector>
5
9
  #include <iostream>
6
10
 
@@ -13,20 +17,20 @@ namespace Sass {
13
17
 
14
18
  struct Backtrace;
15
19
 
16
- class Listize : public Operation_CRTP<Expression_Ptr, Listize> {
17
-
18
- Expression_Ptr fallback_impl(AST_Node_Ptr n);
20
+ class Listize : public Operation_CRTP<Expression*, Listize> {
19
21
 
20
22
  public:
21
23
  Listize();
22
24
  ~Listize() { }
23
25
 
24
- Expression_Ptr operator()(Selector_List_Ptr);
25
- Expression_Ptr operator()(Complex_Selector_Ptr);
26
- Expression_Ptr operator()(Compound_Selector_Ptr);
26
+ Expression* operator()(Selector_List*);
27
+ Expression* operator()(Complex_Selector*);
28
+ Expression* operator()(Compound_Selector*);
27
29
 
30
+ // generic fallback
28
31
  template <typename U>
29
- Expression_Ptr fallback(U x) { return fallback_impl(x); }
32
+ Expression* fallback(U x)
33
+ { return Cast<Expression>(x); }
30
34
  };
31
35
 
32
36
  }
@@ -18,7 +18,7 @@ namespace Sass {
18
18
  std::cerr << "# REPORTING MISSING DEALLOCATIONS #\n";
19
19
  std::cerr << "###################################\n";
20
20
  for (SharedObj* var : all) {
21
- if (AST_Node_Ptr ast = dynamic_cast<AST_Node*>(var)) {
21
+ if (AST_Node* ast = dynamic_cast<AST_Node*>(var)) {
22
22
  debug_ast(ast);
23
23
  } else {
24
24
  std::cerr << "LEAKED " << var << "\n";
@@ -30,85 +30,4 @@ namespace Sass {
30
30
  #endif
31
31
 
32
32
  bool SharedObj::taint = false;
33
-
34
- SharedObj::SharedObj()
35
- : detached(false)
36
- #ifdef DEBUG_SHARED_PTR
37
- , dbg(false)
38
- #endif
39
- {
40
- refcounter = 0;
41
- #ifdef DEBUG_SHARED_PTR
42
- if (taint) all.push_back(this);
43
- #endif
44
- };
45
-
46
- SharedObj::~SharedObj() {
47
- #ifdef DEBUG_SHARED_PTR
48
- if (dbg) std::cerr << "Destruct " << this << "\n";
49
- if(!all.empty()) { // check needed for MSVC (no clue why?)
50
- all.erase(std::remove(all.begin(), all.end(), this), all.end());
51
- }
52
- #endif
53
- };
54
-
55
- void SharedPtr::decRefCount() {
56
- if (node) {
57
- -- node->refcounter;
58
- #ifdef DEBUG_SHARED_PTR
59
- if (node->dbg) std::cerr << "- " << node << " X " << node->refcounter << " (" << this << ") " << "\n";
60
- #endif
61
- if (node->refcounter == 0) {
62
- #ifdef DEBUG_SHARED_PTR
63
- // AST_Node_Ptr ast = dynamic_cast<AST_Node*>(node);
64
- if (node->dbg) std::cerr << "DELETE NODE " << node << "\n";
65
- #endif
66
- if (!node->detached) {
67
- delete(node);
68
- }
69
- }
70
- }
71
- }
72
-
73
- void SharedPtr::incRefCount() {
74
- if (node) {
75
- ++ node->refcounter;
76
- node->detached = false;
77
- #ifdef DEBUG_SHARED_PTR
78
- if (node->dbg) {
79
- std::cerr << "+ " << node << " X " << node->refcounter << " (" << this << ") " << "\n";
80
- }
81
- #endif
82
- }
83
- }
84
-
85
- SharedPtr::~SharedPtr() {
86
- decRefCount();
87
- }
88
-
89
-
90
- // the create constructor
91
- SharedPtr::SharedPtr(SharedObj* ptr)
92
- : node(ptr) {
93
- incRefCount();
94
- }
95
- // copy assignment operator
96
- SharedPtr& SharedPtr::operator=(const SharedPtr& rhs) {
97
- void* cur_ptr = (void*) node;
98
- void* rhs_ptr = (void*) rhs.node;
99
- if (cur_ptr == rhs_ptr) {
100
- return *this;
101
- }
102
- decRefCount();
103
- node = rhs.node;
104
- incRefCount();
105
- return *this;
106
- }
107
-
108
- // the copy constructor
109
- SharedPtr::SharedPtr(const SharedPtr& obj)
110
- : node(obj.node) {
111
- incRefCount();
112
- }
113
-
114
- }
33
+ }
@@ -3,6 +3,8 @@
3
3
 
4
4
  #include "sass/base.h"
5
5
 
6
+ #include <iostream>
7
+ #include <string>
6
8
  #include <vector>
7
9
 
8
10
  namespace Sass {
@@ -39,168 +41,150 @@ namespace Sass {
39
41
  #endif
40
42
 
41
43
  class SharedObj {
42
- protected:
43
- friend class SharedPtr;
44
- friend class Memory_Manager;
44
+ public:
45
+ SharedObj() : refcount(0), detached(false) {
46
+ #ifdef DEBUG_SHARED_PTR
47
+ if (taint) all.push_back(this);
48
+ #endif
49
+ }
50
+ virtual ~SharedObj() {
51
+ #ifdef DEBUG_SHARED_PTR
52
+ all.clear();
53
+ #endif
54
+ }
55
+
45
56
  #ifdef DEBUG_SHARED_PTR
46
- static std::vector<SharedObj*> all;
47
- std::string file;
48
- size_t line;
57
+ static void dumpMemLeaks();
58
+ SharedObj* trace(std::string file, size_t line) {
59
+ this->file = file;
60
+ this->line = line;
61
+ return this;
62
+ }
63
+ std::string getDbgFile() { return file; }
64
+ size_t getDbgLine() { return line; }
65
+ void setDbg(bool dbg) { this->dbg = dbg; }
66
+ size_t getRefCount() const { return refcount; }
49
67
  #endif
50
- static bool taint;
51
- long refcounter;
52
- // long refcount;
68
+
69
+ static void setTaint(bool val) { taint = val; }
70
+
71
+ virtual const std::string to_string() const = 0;
72
+ protected:
73
+ friend class SharedPtr;
74
+ friend class Memory_Manager;
75
+ size_t refcount;
53
76
  bool detached;
77
+ static bool taint;
54
78
  #ifdef DEBUG_SHARED_PTR
55
- bool dbg;
56
- #endif
57
- public:
58
- #ifdef DEBUG_SHARED_PTR
59
- static void dumpMemLeaks();
60
- SharedObj* trace(std::string file, size_t line) {
61
- this->file = file;
62
- this->line = line;
63
- return this;
64
- }
65
- #endif
66
- SharedObj();
67
- #ifdef DEBUG_SHARED_PTR
68
- std::string getDbgFile() {
69
- return file;
70
- }
71
- size_t getDbgLine() {
72
- return line;
73
- }
74
- void setDbg(bool dbg) {
75
- this->dbg = dbg;
76
- }
79
+ std::string file;
80
+ size_t line;
81
+ bool dbg = false;
82
+ static std::vector<SharedObj*> all;
77
83
  #endif
78
- static void setTaint(bool val) {
79
- taint = val;
80
- }
81
- virtual ~SharedObj();
82
- long getRefCount() {
83
- return refcounter;
84
- }
85
84
  };
86
85
 
87
-
88
86
  class SharedPtr {
89
- protected:
90
- SharedObj* node;
91
- protected:
92
- void decRefCount();
93
- void incRefCount();
94
- public:
95
- // the empty constructor
96
- SharedPtr()
97
- : node(NULL) {};
98
- // the create constructor
99
- SharedPtr(SharedObj* ptr);
100
- // the copy constructor
101
- SharedPtr(const SharedPtr& obj);
102
- // the move constructor
103
- SharedPtr(SharedPtr&& obj);
104
- // copy assignment operator
105
- SharedPtr& operator=(const SharedPtr& obj);
106
- // move assignment operator
107
- SharedPtr& operator=(SharedPtr&& obj);
108
- // pure virtual destructor
109
- virtual ~SharedPtr() = 0;
110
- public:
111
- SharedObj* obj () const {
112
- return node;
113
- };
114
- SharedObj* operator-> () const {
115
- return node;
116
- };
117
- bool isNull () {
118
- return node == NULL;
119
- };
120
- bool isNull () const {
121
- return node == NULL;
122
- };
123
- SharedObj* detach() const {
124
- if (node) {
125
- node->detached = true;
87
+ public:
88
+ SharedPtr() : node(nullptr) {}
89
+ SharedPtr(SharedObj* ptr) : node(ptr) {
90
+ incRefCount();
91
+ }
92
+ SharedPtr(const SharedPtr& obj) : SharedPtr(obj.node) {}
93
+ ~SharedPtr() {
94
+ decRefCount();
95
+ }
96
+
97
+ SharedPtr& operator=(SharedObj* other_node) {
98
+ if (node != other_node) {
99
+ decRefCount();
100
+ node = other_node;
101
+ incRefCount();
102
+ } else if (node != nullptr) {
103
+ node->detached = false;
126
104
  }
127
- return node;
128
- };
129
- operator bool() const {
130
- return node != NULL;
131
- };
105
+ return *this;
106
+ }
132
107
 
133
- };
108
+ SharedPtr& operator=(const SharedPtr& obj) {
109
+ return *this = obj.node;
110
+ }
134
111
 
135
- template < class T >
136
- class SharedImpl : private SharedPtr {
137
- public:
138
- SharedImpl()
139
- : SharedPtr(NULL) {};
140
- SharedImpl(T* node)
141
- : SharedPtr(node) {};
142
- template < class U >
143
- SharedImpl(SharedImpl<U> obj)
144
- : SharedPtr(static_cast<T*>(obj.ptr())) {}
145
- SharedImpl(T&& node)
146
- : SharedPtr(node) {};
147
- SharedImpl(const T& node)
148
- : SharedPtr(node) {};
149
- // the copy constructor
150
- SharedImpl(const SharedImpl<T>& impl)
151
- : SharedPtr(impl.node) {};
152
- // the move constructor
153
- SharedImpl(SharedImpl<T>&& impl)
154
- : SharedPtr(impl.node) {};
155
- // copy assignment operator
156
- SharedImpl<T>& operator=(const SharedImpl<T>& rhs) {
157
- if (node) decRefCount();
158
- node = rhs.node;
159
- incRefCount();
160
- return *this;
112
+ // Prevents all SharedPtrs from freeing this node until it is assigned to another SharedPtr.
113
+ SharedObj* detach() {
114
+ if (node != nullptr) node->detached = true;
115
+ return node;
161
116
  }
162
- // move assignment operator
163
- SharedImpl<T>& operator=(SharedImpl<T>&& rhs) {
164
- // don't move our self
165
- if (this != &rhs) {
166
- if (node) decRefCount();
167
- node = std::move(rhs.node);
168
- rhs.node = NULL;
117
+
118
+ SharedObj* obj() const { return node; }
119
+ SharedObj* operator->() const { return node; }
120
+ bool isNull() const { return node == nullptr; }
121
+ operator bool() const { return node != nullptr; }
122
+
123
+ protected:
124
+ SharedObj* node;
125
+ void decRefCount() {
126
+ if (node == nullptr) return;
127
+ --node->refcount;
128
+ #ifdef DEBUG_SHARED_PTR
129
+ if (node->dbg) std::cerr << "- " << node << " X " << node->refcount << " (" << this << ") " << "\n";
130
+ #endif
131
+ if (node->refcount == 0 && !node->detached) {
132
+ #ifdef DEBUG_SHARED_PTR
133
+ if (node->dbg) std::cerr << "DELETE NODE " << node << "\n";
134
+ #endif
135
+ delete node;
169
136
  }
170
- return *this;
171
137
  }
172
- ~SharedImpl() {};
173
- public:
174
- operator T*() const {
175
- return static_cast<T*>(this->obj());
138
+ void incRefCount() {
139
+ if (node == nullptr) return;
140
+ node->detached = false;
141
+ ++node->refcount;
142
+ #ifdef DEBUG_SHARED_PTR
143
+ if (node->dbg) std::cerr << "+ " << node << " X " << node->refcount << " (" << this << ") " << "\n";
144
+ #endif
176
145
  }
177
- operator T&() const {
178
- return *static_cast<T*>(this->obj());
146
+ };
147
+
148
+ template <class T>
149
+ class SharedImpl : private SharedPtr {
150
+ public:
151
+ SharedImpl() : SharedPtr(nullptr) {}
152
+
153
+ template <class U>
154
+ SharedImpl(U* node) :
155
+ SharedPtr(static_cast<T*>(node)) {}
156
+
157
+ template <class U>
158
+ SharedImpl(const SharedImpl<U>& impl) :
159
+ SharedImpl(impl.ptr()) {}
160
+
161
+ template <class U>
162
+ SharedImpl<T>& operator=(U *rhs) {
163
+ return static_cast<SharedImpl<T>&>(
164
+ SharedPtr::operator=(static_cast<T*>(rhs)));
179
165
  }
180
- T& operator* () const {
181
- return *static_cast<T*>(this->obj());
182
- };
183
- T* operator-> () const {
184
- return static_cast<T*>(this->obj());
185
- };
186
- T* ptr () const {
187
- return static_cast<T*>(this->obj());
188
- };
189
- T* detach() const {
190
- if (this->obj() == NULL) return NULL;
191
- return static_cast<T*>(SharedPtr::detach());
166
+
167
+ template <class U>
168
+ SharedImpl<T>& operator=(const SharedImpl<U>& rhs) {
169
+ return static_cast<SharedImpl<T>&>(
170
+ SharedPtr::operator=(static_cast<const SharedImpl<T>&>(rhs)));
192
171
  }
193
- bool isNull() const {
194
- return this->obj() == NULL;
172
+
173
+ operator const std::string() const {
174
+ if (node) return node->to_string();
175
+ return "[nullptr]";
195
176
  }
196
- bool operator<(const T& rhs) const {
197
- return *this->ptr() < rhs;
198
- };
199
- operator bool() const {
200
- return this->obj() != NULL;
201
- };
177
+
178
+ using SharedPtr::isNull;
179
+ using SharedPtr::operator bool;
180
+ operator T*() const { return static_cast<T*>(this->obj()); }
181
+ operator T&() const { return *static_cast<T*>(this->obj()); }
182
+ T& operator* () const { return *static_cast<T*>(this->obj()); };
183
+ T* operator-> () const { return static_cast<T*>(this->obj()); };
184
+ T* ptr () const { return static_cast<T*>(this->obj()); };
185
+ T* detach() { return static_cast<T*>(SharedPtr::detach()); }
202
186
  };
203
187
 
204
188
  }
205
189
 
206
- #endif
190
+ #endif